【问题标题】:TypeError: res.status is not a function in a error handling middlewareTypeError:res.status 不是错误处理中间件中的函数
【发布时间】:2021-04-14 01:38:57
【问题描述】:

我只是想添加一个最小的中间件来处理我的 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

我应该怎么做才能像我想要的那样使用 Request ?

【问题讨论】:

  • @T.J.Crowder 啊是的,但是我该如何访问错误呢?
  • 嗯,刚刚学习了一些关于 Express 中间件的知识。 :-) 谢谢! 真的 他们在那里做出了不幸的选择,让err 成为可选的first 参数。 (!)

标签: node.js typescript api express


【解决方案1】:

如果你想写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 才能知道它是否是错误处理中间件。

【讨论】:

  • 谢谢,我添加了下一个,现在可以使用了!
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
  • 2022-07-16
  • 1970-01-01
  • 2011-05-24
相关资源
最近更新 更多