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

ABS*_*ACT 3 api node.js express typescript

我只是想添加一个最小的中间件来处理我的 Express TypeScript 项目中的错误。
我使用庆祝活动中的错误方法来让它处理庆祝/joi 错误,并希望添加另一个方法来处理其他错误。
这是我的代码:

app.use(errors()); // celebration error handling
app.use((err: any, req: Request, res: Response) => res.status(300).json(err.message));
Run Code Online (Sandbox Code Playgroud)

我为了测试它,尝试将 GET 发送到不存在的端点,但我不断收到此错误:TypeError: res.status is not a function

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

T.J*_*der 5

如果你想编写错误处理中间件,你必须提供一个带有四个声明参数的函数,而不仅仅是三个。所以在你的情况下:

\n
app.use((err: any, req: Request, res: Response, next: NextFunction) => res.status(300).json(err.message));\n
Run Code Online (Sandbox Code Playgroud)\n

即使您没有next在代码中使用该函数,如果它采用四个形式参数,Express 也只能告诉它是一个错误处理程序中间件函数。从上面链接的文档中:

\n
\n

错误处理中间件始终采用四个参数。您必须提供四个参数才能将其标识为错误处理中间件函数。即使您不需要使用该next对象,也必须指定它来维护签名。否则,下一个对象将被解释为常规中间件并且无法处理错误。

\n
\n

Express 必须查看函数的length属性才能知道它是否是错误处理中间件。

\n