Express中间件

2.1 什么是中间件

中间件就是一堆办法,能够接管客户端发来的申请、能够对申请做出响应,也能够将申请持续交给下一个中间件持续解决。

中间件次要由两局部形成,中间件办法以及申请处理函数。
中间件办法由Express提供,负责拦挡申请,申请处理函数由开发人员提供,负责解决申请。

 app.get('申请门路', '处理函数')   // 接管并解决get申请 app.post('申请门路', '处理函数')  // 接管并解决post申请

能够针对同一个申请设置多个中间件,对同一个申请进行屡次解决。
默认状况下,申请从上到下顺次匹配中间件,一旦匹配胜利,终止匹配。
能够调用next办法将申请的控制权交给下一个中间件,直到遇到完结申请的中间件。

 app.get('/request', (req, res, next) => {     req.name = "张三";     next(); }); app.get('/request', (req, res) => {     res.send(req.name); });
2.2 app.use中间件用法

app.use 匹配所有的申请形式,能够间接传入申请处理函数,代表接管所有的申请。

 app.use((req, res, next) => {     console.log(req.url);     next(); });

app.use 第一个参数也能够传入申请地址,代表不论什么申请形式,只有是这个申请地址就接管这个申请。

 app.use('/admin', (req, res, next) => {     console.log(req.url);     next(); });
2.3 中间件利用
  1. 路由爱护,客户端在拜访须要登录的页面时,能够先应用中间件判断用户登录状态,用户如果未登录,则拦挡申请,间接响应,禁止用户进入须要登录的页面。
  2. 网站保护布告,在所有路由的最下面定义接管所有申请的中间件,间接为客户端做出响应,网站正在保护中。
  3. 自定义404页面
2.4 错误处理中间件

在程序执行的过程中,不可避免的会呈现一些无奈意料的谬误,比方文件读取失败,数据库连贯失败。
错误处理中间件是一个集中处理错误的中央。

 app.use((err, req, res, next) => {     res.status(500).send('服务器产生未知谬误'); })

当程序呈现谬误时,调用next()办法,并且将错误信息通过参数的模式传递给next()办法,即可触发错误处理中间件。

 app.get("/", (req, res, next) => {     fs.readFile("/file-does-not-exist", (err, data) => {         if (err) {            next(err);         }     });});
2.5 捕捉谬误

在node.js中,异步API的错误信息都是通过回调函数获取的,反对Promise对象的异步API产生谬误能够通过catch办法捕捉。
异步函数执行如果产生谬误要如何捕捉谬误呢?

try catch 能够捕捉异步函数以及其余同步代码在执行过程中产生的谬误,然而不能其余类型的API产生的谬误。

 app.get("/", async (req, res, next) => {     try {         await User.find({name: '张三'})     }catch(ex) {         next(ex);     } });