上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(),否则不会进入下一个错误处理函数导致请求挂起。