一.中间件原理
中间件:封装了请求对象与相应对象的能够实现特定功能的函数
//use()可以相应任意的方法请求,例如get,post,put,delete...
//自定义错误消息中间件,如果用户的所有路由都不能匹配,在此给出一个有好的提示,注意一定要放在所有的路由的最后面。
app.use((req,res)=>{
res.send('对不起找不到你想要的资源');
})
作用:中间件值业务处理过程中中间环节,例如一家工厂从原材料到生产出成品,中间需要多个加工环节。项目的开发类似,当用户的数据提交后,经过多个中间件处理函数,最后给用户一个响应的结果。
二.中间件案例
利用中间件,给所有的请求对象添加一个时间属性
1.安装:npm i time-stamp
2.引入时间模块:let time = require('time-stamp');
3.添加时间属性
app.use((req,res,next)=>{ req.time = time('YYYY年MM月DD日-HH:mm:ss'); next(); });//经过以上的中间件的处理后,req的请求对象上就多了个time属性
4.响应
三.中间件前缀
如果某个中间件只是针对某种请求起作用,可以针对性的添加前缀
eg:app.use('/student',(req,res)=>{
res.send('找到学生模块')
})
1.一般是在路由之前使用中间件(错误消息处理中间件除外)
2.可以连续使用中间件处理客户端请求
3.中间件中必须有next()
4.多个中间件的请求与相应对象是共享的(同一个)
四.错误处理中间件
1.404错误中间件
//404错误中间价
app.use((req,res)=>{
res.status(404);
res.send('对不起,找不到资源')
})
2.逻辑错误处理中间件
在项目代码中,所有不满足条件的消息可以统一由一个逻辑错误处理中间件来向用户提示错误消息
eg:
//处理中间件来向用户发送提示信息 在路由中设置
router.get('/login',(req,res,next)=>{
let urlObj = url.parse(req.url,true);
let {query:{username}} = urlObj;
if(username == 'zss'){
res.send('登录成功')
}else{
//res.send('不存在此用户')
next('不存在此用户')
//next()会自动查找逻辑错误处理中间件
}
})
//在入口文件中设置
//逻辑错误中间件
app.use((err,req,res,next)=>{
res.send('错误:'+err);
next();
})