Express是否自动处理状态码值的错误?

时间:2019-07-10 19:17:32

标签: express

TL / DR Express是否具有一些未记录的默认错误处理代码?


Express(v4.17.1)遇到一些令人费解的行为,它是默认的错误处理。

我正处于构建API的早期阶段。我整理了一个路由处理程序,并将其与第一条路由以及许多单元测试挂钩。

我的设计与this answer中描述的设计非常相似:我有一个名为NotFoundError的自定义类,该类扩展了Error并包括一个statusCode属性。

路线如下:

router.get('/api/resource/:id', ...);

例如,当我查询数据库并且找不到具有提供的next值的行时,此错误将传递给Express :id函数。

现在,我期望编写一个自定义错误处理程序,该处理程序将处理NotFoundError并以404状态代码进行响应。但是令我惊讶的是,我为404错误编写的测试通过了!

我花了一些时间处理代码,发现将自定义错误类的statusCode属性更改为myStatusCode会导致请求失败,并出现500错误(这是预期的)。

所以Express似乎喜欢statusCode属性,并且似乎知道该怎么做。我在the Express documentation中找不到任何描述这种行为的东西。

这是无证的行为吗?还是发生了其他事情?

1 个答案:

答案 0 :(得分:0)

事实证明答案是-Express通过statusCode属性“自动”处理错误。感谢@PimentoWeb为我指出正确的方向。

事实证明,Express具有一个名为finalhandler的依赖关系,该依赖关系基于错误对象的statusstatusCode属性返回HTTP状态:

  

从err.status(或err.statusCode)设置res.statusCode。如果该值超出4xx或5xx范围,则将其设置为500。