NodeJs
定义:node.js是运行在服务端的javaScript,是一个基于chrome javaScript运行时建立的平台,使用了一个事件驱动、非阻塞式I/O的模型,用于方便地搭建响应速度快、易于扩展的网络应用。
创建一个简单的服务器
//引入http模块
const http = require('http');
const server = http.createServer((req,res)=> {
//发送响应状态
res.statusCode = 200
//设置响应头(响应的数据类型及编码)
res.setHeader('Content-Type','text/html;charset=utf-8')
//响应结束,发送数据
res.end('您好 NodeJs');
})
//服务监听
server.listen(3001,'127.0.0.1',(=>{
console.log('Server running at http://127.0.0.1:3001/');
}))
NPM
是世界上最大的开放源代码的生态系统,通过npm下载第三方包到本地使用,下载安装别人编写的命令行程序(supervisor—修改文件后自动重新启动
),将自己编写的包或命令行程序上传NPM服务器上
创建模块: npm init (会在模块的根目录创建一个 package.json 文件,里面记录了当前模块的名称、版本号和依赖项目等信息)
安装项目: npm -install 项目名 --save (加入–save就是将包写入到package.json下的dependencies中,如果使用cnpm不加–save是不会保存的)
卸载项目: npm uninstall 项目名
更新项目: npm update 项目名
安装淘宝镜像(下载速度更快): npm i -g cnpm --registry=https://registry.npm.taobao.org
安装 package.json 中依赖的项目: npm install
EJS模板
脚本标签
<% JavaScript脚本 %>
输出标签
<%=变量%>
导入模板
<!-- 导入 header.ejs 模板 -->
<%- include('header') -%>
案例
创建header.ejs、footer.ejs和index.ejs模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>EJS模板引擎 </title>
</head>
<body>
<h1> <%= msg %> </h1>
<ul>
<% list.forEach(item=>{ %>
<li><%=item %></li>
<% }) %>
</ul>
<p>
<% if(isLogin){ %>
<span>你好,请登录</span>
<% }else{ %>
<span>你好,over</span>
<% } %>
</p> -->
<!-- 导入 header.ejs 模板 -->
<%- include('header') -%>
<p>index.ejs</p>
<!-- 导入 footer.ejs 模板 -->
<%- include('footer') -%>
</body>
</html>
渲染模板
const http = require('http')
//引入模板
const ejs = require('ejs')
http.createServer((req,res)=>{
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'})
if(req.url == '/index'){
//渲染模板
ejs.renderFile('./views/index.ejs',{msg:'Hello EJS',list:['1','2','3'],isLogin:false},(err,str)=>{
if(err){
console.log(err.message)
return
}
res.end(str)
})
}
}).listen('3003','127.0.0.1',()=>{
console.log('服务启动中')
})
Express
案例
const express = require('express')
//创建一个express应用程序
const app = express()
//路由
//1、get请求
app.get('/',(req,res)=>{
res.send('<hr><p>Hello,express应用程序</p>')
})
//2、post请求,使用了路由匹配路径,以/index/为开头的都可以匹配到(/index 不能匹配/index/ 可以匹配/index/a/b 可以匹配),? 前一个字符出现0~1次
app.post('/index/*',(req,res)=>{
res.send('<h1>Post路由</h2>')
})
//3、所有请求
app.all('/',(req,res)=>{
res.send('所有请求')
})
//4、多处理程序,除非是最后一次处理,否则请不要执行 res.send()等发送指令;除非是最后一次处理,否则请不要忘记 next 形参与 next() 指令
let handler1 = (req,res,next)=>{
console.log('handler1处理中')
//执行下一个
next()
}
let handler2 = (req,res)=>{
res.send('handler2处理中')
}
app.get('/',[handler1,handler2])
//5、重定向
app.get('/',(req,res)=>{
res.redirect('/index')
})
app.get('/index',(req,res)=>{
res.sendFile(`${__dirname}/index.html`) //__dirname表示当前模块的目录名。
})
//6、加载静态资源,参数static是项目目录
app.use(express.static('static'))
app.get('/index',(req,res)=>{
res.sendFile(`${__dirname}/html/index.html`)
})
//7、获取get、post、参数
//1.获取get请求参数 http://127.0.0.1:3004/index?id=2
app.get('/index',(req,res)=>{
let id = req.query.id
console.log(id)
})
//第二种获取get参数 http://127.0.0.1:3004/index/2
app.get('/index/:id',(req,res)=>{
console.log(req.params.id)
res.end()
})
//post请求获取参数
app.use(express.urlencoded({extended:true}))
app.post('/login',(req,res)=>{
console.log(req.body.userName,req.body.password)
})
//监听服务端口
app.listen(3004)
express使用ejs模板引擎
//创建一个index.ejs的文件
// 设置模板引擎类型
app.set('view engine','ejs')
// 设置模板所在的目录
app.set('views',`${__dirname}/views`)
app.get('/', (req, res) => {
// 渲染模板并发送给客户端,index后不用加ejs
res.render('index',{msg:'EJS'})
})