问题描述
我只想添加一个最小的中间件来处理我的 express typescript 项目中的错误。
我使用来自庆祝的错误方法让它处理庆祝/joi 错误,并想添加另一个来处理其他错误。
这是我的代码:
app.use(errors()); // celebration error handling
app.use((err: any,req: Request,res: Response) => res.status(300).json(err.message));
为了测试它,我尝试向不存在的端点发送 GET,但我不断收到此错误:TypeError: res.status is not a function
我应该怎么做才能像我想要的那样使用请求?
解决方法
如果你想写error handling middleware,你必须提供一个带有四个声明参数的函数,而不仅仅是三个。所以在你的情况下:
app.use((err: any,req: Request,res: Response,next: NextFunction) => res.status(300).json(err.message));
即使您没有在代码中使用 next
函数,Express 也只能告诉它是一个错误处理程序中间件函数,如果它需要四个形参。来自上面链接的文档:
错误处理中间件总是采用四个参数。您必须提供四个参数以将其标识为错误处理中间件函数。即使不需要使用 next
对象,也必须指定它来维护签名。否则,下一个对象将被解释为常规中间件并且无法处理错误。
Express 必须查看函数的 length
property 才能知道它是否是错误处理中间件。