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中找不到任何描述这种行为的东西。
这是无证的行为吗?还是发生了其他事情?
答案 0 :(得分:0)
事实证明答案是是-Express通过statusCode
属性“自动”处理错误。感谢@PimentoWeb为我指出正确的方向。
事实证明,Express具有一个名为finalhandler的依赖关系,该依赖关系基于错误对象的status
或statusCode
属性返回HTTP状态:
从err.status(或err.statusCode)设置res.statusCode。如果该值超出4xx或5xx范围,则将其设置为500。