在Nestjs中,可以通过使用中间件来捕获500错误并返回错误信息。下面是一个示例代码:
首先,创建一个中间件文件error.middleware.ts
,并在其中编写捕获错误的逻辑:
import { Middleware, NestMiddleware, HttpException, HttpStatus } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Middleware()
export class ErrorMiddleware implements NestMiddleware {
resolve() {
return async (err: any, req: Request, res: Response, next: NextFunction) => {
const status = err instanceof HttpException ? err.getStatus() : HttpStatus.INTERNAL_SERVER_ERROR;
const message = err.message || 'Internal server error';
const errorResponse = {
status,
message,
};
if (status === HttpStatus.INTERNAL_SERVER_ERROR) {
console.error(err); // 可以选择将错误日志记录到日志文件中
}
res.status(status).json(errorResponse);
};
}
}
然后,在主应用模块app.module.ts
中将该中间件添加到全局中间件列表中:
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ErrorMiddleware } from './error.middleware';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(ErrorMiddleware).forRoutes('*');
}
}
这样,当发生500错误时,中间件将捕获错误并返回错误信息给客户端。你可以根据需要自定义错误信息的格式和日志记录方式。
上一篇:捕获内容安全策略指令违规
下一篇:捕获n个子进程的退出代码