花 15 分钟把 Express.js 搞明白,全栈没有那么难( 三 )


Express 应用中一切皆中间件,如果匹配到多个中间件会按照顺序依次调用 。此时 next() 函数就能派上用场了 , 他的作用是进入下一个中间件 。
比如代码中的 myLogger 中间件,将它挂载到路由之前,那么每次请求首先会打印出 “LOGGED”,然后再进入路由处理函数 。
如果 myLogger 中间件中没有调用 next() 函数,请求就会被堵在这里,无法进入路由处理函数,此时请求会被挂起 。
统一错误处理,提升健壮性既然一切皆中间件,那么错误处理也是一个中间件 。错误处理函数与其他的中间件函数稍有不同,它多了一个 err 参数,如下:
app.use((err, req, res, next) => {console.error(err.stack)res.status(500).send('服务器出错了!')})err 参数表示错误信息,当发生错误时进入该中间件 , 此时要设置 HTTP 状态码为 500,并根据错误信息为客户端返回错误响应 。
错误处理中间件是一个兜底中间件,请确保它定义在所有中间件之后,是应用中的最后一个中间件 。
请求进入错误中间件,说明前面的所有中间件都没有匹配到 。但是如果客户端请求地址写错而进入错误处理中间件,此时返回 500 错误显然不合理,应该是 404 资源未找到 。
所以在错误处理中间件前 , 还应该定义一个 404 中间件 。该中间件要在所有路由之后,错误处理之前,是应用的倒数第二个中间件 , 代码如下:
app.use((req, res, next) => {res.status(404).send('Not Found')})好了,现在我们的应用就健壮多了 。
总结本文列举了 Express 框架的核心,并举例如何应用 , 整体并没有那么难 。掌握这部分知识,可以快速拥 API 开发的思维 。




推荐阅读