携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情
前阵子更新的node没有写完整,包括现在的也不是太完整,很多还是得看官方文档的,这个也算是之前遗漏的Express中间件补充。
正文开始了————————————————————————————————
中间件
1.定义:
业务逻辑流程中的中间环节
2.Express中间件
在 Express 程序中,通过调用 app.use 向管道中插入中间件,比如有些接口需要token验证,则可以使用use()方法插入token校验中间件,或者在业务逻辑的最下游加上错误中间件,根据不同的错误类型抛出对应的错误信息。
对于每一个中间件则需要在执行完逻辑后调用next(),让程序继续往下运行。
3.全局和局部中间件
定义中间件函数
//全局中间件
app.use(middleware)
//局部中间件(不使用app.use注册的中间件)
app.get('/',middleware,()=>{})
4.常⽤的应⽤场景
- 路由保护:客户端访问需要登录的请求时,可以使⽤中间件进⾏拦截,判断⽤户的登录状态,进⽽响应⽤户是否允许访问
//登录拦截
app.use((req,res,next)=>{
let isLogin = true
if(isLogin){
next()
}else{
res.send('登录后才可访问')
}
})
- ⽹站维护:在所有中间件上定义⼀个接收所有请求的中间件,不使⽤next,直接给客户端响应表示⽹站维护中
app.use((req,res,next)=>{
res.send('⽹站正在维护中')
})
- ⾃定义404⻚⾯
//⾃定义404
app.use((req,res)=>{
res.status(404).send('404 NOT FOUND')
})
5.错误的中间件
- 错误处理中间件
//错误处理中间件
app.use((err,req,res,next)=>{
res.status(500).send(err.message)
})
- ⼿动触发错误处理中间件,通过next⽅法,把错误信息通过参数传给next⽅法即可
app.get('/index', (req, res, next) => {
fs.readFile('./index.js', 'utf8', (err, result) => {
if (err) {
next(err)
return;
}else {
res.send(result)
}
})
})