Node.js+Webpack开发实战
上QQ阅读APP看书,第一时间看更新

4.7 错误处理

错误处理指Express如何捕获和处理同步和异步发生的错误。Express带有默认错误处理程序,因此一般情况下无须手动编写错误处理程序。

4.7.1 同步错误

以下是一个同步错误的示例:

访问http://localhost:8080,将提示如下错误信息,这是Express默认的模板。

同步错误一般交给框架自动处理即可。

4.7.2 异步错误

异步错误一般是发生在回调函数中的错误,需要通过next(err)才能捕获异步错误。

以下是捕获读取文件的错误示例:

异步错误需要手动调用next()并传递Error对象。

传递给next()的参数可以是字符串、数字、Error对象等等,建议传递Error对象。只要传递了非空参数,Express就会执行错误处理流程。

4.7.3 自定义错误处理函数

如果需要自定义错误函数的逻辑,可以使用自己编写的错误处理函数。

错误处理函数的签名如下:

function errorHandler(err, req, resp, next)

· err:错误对象。

· req:请求对象。

· resp:响应对象。

· next:下一个错误处理器。

处理器本质也是中间件,但是需要放置在所有中间件、路由函数的后面才会生效。

以下是将默认的HTML错误响应更改为JSON的示例。

4.7.4 多个错误处理函数

函数式编程一个重要的哲学是:一个函数只做一件事。以错误处理来说,我们需要记录日志、发送响应,这两件事可以通过两个中间件来完成:一个记录日志;另一个发送响应。

多个错误处理函数工作时不要忘记调用next(),否则不会进入下一个错误处理函数导致请求挂起。