温柔的紫菜汤
5 月前 |
您好,我在我的节点typescript应用程序中创建了一个自定义错误中间件处理程序
并得到消息不存在于类型ErrorRquestHandler上的错误
const errorHandler = (
err: ErrorRequestHandler,
_req: Request,
res: Response,
_next: NextFunction
) => {
const statusCode = res.statusCode === 200 ? 500 : res.statusCode;
res.status(statusCode);
res.json({
message: err.message,
stack: err.stack
}
我尝试在我的tsconfig.json文件中取消注释"typeRoots“和"types”,但仍然出现相同的错误。
是什么导致了这个错误?谢谢
发布于 2021-11-17 23:14:55
看起来您有一个正确声明的错误处理程序,但是
err
参数的类型是错误的,相反,
const errorHandler
本身应该使用
ErrorRequestHandler
类型,以便推断参数。
类型
ErrorRequestHandler
为
defined as follows in DefinitelyTyped
export type ErrorRequestHandler<
P = ParamsDictionary,
ResBody = any,
ReqBody = any,
ReqQuery = ParsedQs,
Locals extends Record<string, any> = Record<string, any>
err: any,
req: Request<P, ResBody, ReqBody, ReqQuery, Locals>,
res: Response<ResBody, Locals>,
next: NextFunction,
) => void;
建议您的代码应如下所示:
const errorHandler: ErrorRequestHandler = (
_req,
_next
) => {
const statusCode = res.statusCode === 200 ? 500 : res.statusCode;
res.status(statusCode);
res.json({
message: err.message,
stack: err.stack