微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TypeError: res.status 不是错误处理中间件中的函数

如何解决TypeError: res.status 不是错误处理中间件中的函数

我只想添加一个最小的中间件来处理我的 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 才能知道它是否是错误处理中间件。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。