用typescript编写的自定义错误响应在nodejs中不工作



我有一个自定义的通用错误响应,它将在执行return next(error)时运行,但它不起作用,它向控制台抛出了一个错误。请帮帮我,给我一个解释。

useErrorHandler。这是我的自定义错误响应扩展error

import { Request, Response } from 'express';
export class ErrorResponse extends Error {
public statusCode: number;
constructor(message: string, statusCode: number) {
super(message);
this.statusCode = statusCode;
}
}
const handleError = (err: any, req: Request, res: Response) => {
res.status(err.statusCode || 500).json({
success: false,
error: err.message || 'Internal Server Error',
});
};
export default handleError;

category.controller。这是我的控制器,我试图给出一个错误

import { NextFunction, Request, Response } from 'express';
import { createCategory } from '../services/category.service';
import { ErrorResponse } from '../middlewares/error';
export const handleCreateCategory = async (
req: Request,
res: Response,
next: NextFunction
) => {
// const category = await createCategory(req.body);
// return res.status(200).send(category);
return next(new ErrorResponse('cccca 3000', 401));
};

应用程序。这是我的主文件,它包含路由,头文件,中间件等。

import express, { Express, Response, Request } from 'express';
import {
authRouter,
productRouter,
categoryRouter,
cartRouter,
} from './routes';
import { useErrorHandler } from './middlewares';
class App {
public express: Express;
private readonly ENDPOINT: string;
constructor() {
this.express = express();
this.ENDPOINT = '/api/v1';
this.setHeaders();
this.setMiddlewares();
this.mountRoutes();
}
private setHeaders(): void {}
private setMiddlewares(): void {
this.express.use(express.json());
this.express.use(express.urlencoded());
}
private mountRoutes(): void {
this.express.use(`${this.ENDPOINT}/auth`, authRouter);
this.express.use(`${this.ENDPOINT}/product`, productRouter);
this.express.use(`${this.ENDPOINT}/category`, categoryRouter);
this.express.use(`${this.ENDPOINT}/cart`, cartRouter);
//handle err
this.express.use(useErrorHandler);
}
}
export default new App().express;

使用Postman测试错误响应

错误处理程序中间件应该总是有4个参数。这就是Express如何知道它是一个错误处理程序方法。

如果你写你的handleError函数像下面的代码,它将工作。

const handleError = (err: any, req: Request, res: Response, next: NextFunction) => {
...
};

https://expressjs.com/en/guide/error-handling.html

请参阅编写错误处理程序一节。

最新更新