「掘金日新计划 · 8 月更文挑战」的第8天—express中间件

34 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情

image.png

前阵子更新的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)
}
})
})