框架
:
安装express:
npm install express --save
const express =require('express') const app=express() app.use('/',function(res,req,next){ console.log('hh'); //中间件有一个next()函数,如果不调用next函数,请求就在这个中间件中终止了 next() }) app.get('url地址',function(req,res){ //用res.send()方法向客户端发送----可以是对象,字符串等 res.send('hahahha') }) //启动 app.listen(810,function(){ console.log('http://127.0.0.1:810'); })
中间件
:
- 除错误级别中间件要放在所有路由之后,其他中间件必须放在所有路由之前
- 客户端发过来的请求,可以连续多个中间件进行处理
- 执行完中间件业务代码后,要调用next(),后面不要写额外代码
- 连续调用多个中间件时,多个中间件之间,共享req,res对象
中间件函数:
function(req,res,next){ console.log('sdf') //将流转关系转交给下一个中间件或者路由 next() }
如要在路由处理链上插上中间件,express的use方法:
app.use([path],function(){})
其中path无参数时,默认路径为’/‘
全局生效的中间件:客户端发送任何请求到达服务器都会触发的中间件(使用app.use()方法),若想在多个路由中使用同种属性,可以将其写在中间件中,用req对象自定义属性,传给后面所要共享的路由
app.use(function(req,res,next){ const time =Date.now() //为req对象,挂载自定义属性,从而把时间共享给后面 req.startTime=time //把流转关系,转交给下一个中间件或路由 next() })
局部生效中间件:不使用app.use()方法,直接在路由中添加局部中间件函数
const mw =function(req,res,next{ console.log('oooooo') }) app.get('/',mw,function(req,res){ res.send('okokok') })
app.get([path],‘中间件函数名称’,function(req,res){})
内置中间件:客户端发送请求体数据,解析数据
- express.static :静态托管资源中间件
app.use('/demo',express.static('demo'))
- 解析json请求体数据
app.use(express.json())
- 解析json请求体数据
app.use(express.json())
第三方中间件(body-parser):
1.运行npm install body-parser
2.使用require导入中间件
3.调用app.use()注册并使用中间件
//导入解析表单数据的中间件body-parser const parser = require('body-parser') //使用app.use()注册中间件 app.use(parser.urlencoded({entended:false})) //发送请求 app.post('/',function(req,res)){ console.log(req.body) res.send('sleep') }
自定义中间件:客户端发送的请求可以显示出来
const qs = require('querystring') //解析表单数据中间件 app.use(function(req,res,next){ //定义一个str 自动拼接 专门储存从客户端发来的请求体数据 let str="" //监听req的data 事件 req.on('data',function(chuck){ str+=chuck }) //监听req的end事件 req.on('end',function(){ console.log(str); //调用qs.parse()方法,将查询字符串解析为对象 const body =qs.parse(str) //用的为同一个req res 挂载body 使下游路由可以使用 req.body = body next() }) }) app.post('/user',function(req,res){ res.send(req.body) }) ---------------------------------------------------------------- 封装自定义中间件为模块: const qs = require('querystring') //使用变量接受自定义中间件 const bodyParser = function(req,res,next){ let str="" req.on('data',function(chunck){ str +=chunck }) req.on('end',function(){ console.log(str); //调用qs.parse()方法,将查询字符串解析为对象 const body =qs.parse(str) //用的为同一个req res 挂载body 使下游路由可以使用 req.body = body next() }) } //将自定义中间件提供给外部 module.exports = bodyParser ----------------------------------------------- //请求访问自定义中间件模块 const customBodyParser = require('./fengcenter') //解析表单数据的中间件 app.use(customBodyParser
用req.body接收post客户端的数据;req.query接收get请求;使用post请求时需要解析数据中间件app.use(express.urlencoded({extended:false}))