Exception NestJS:异常处理的最佳实践(异常过滤器与拦截器.catchError)
使用over的优缺点是什么。(异常映射)?不确定您是否已经得到了答案,但就我的实现而言,以下场景使用过滤器或拦截器 异常过滤器: 异常过滤器是一种捕获应用程序抛出的错误的机制,无论是在加载模块还是启动请求时,它们都是捕获问题(尤其是运行时错误)的最佳方案 考虑一个场景,其中您已经实现的自定义记录器服务(例如pino记录器服务)具有如下修订路径: (注意:loggerService应该已经定义了实现的方法。现在,我将留空) 这是一个示例编校Exception NestJS:异常处理的最佳实践(异常过滤器与拦截器.catchError),exception,exception-handling,nestjs,Exception,Exception Handling,Nestjs,使用over的优缺点是什么。(异常映射)?不确定您是否已经得到了答案,但就我的实现而言,以下场景使用过滤器或拦截器 异常过滤器: 异常过滤器是一种捕获应用程序抛出的错误的机制,无论是在加载模块还是启动请求时,它们都是捕获问题(尤其是运行时错误)的最佳方案 考虑一个场景,其中您已经实现的自定义记录器服务(例如pino记录器服务)具有如下修订路径: (注意:loggerService应该已经定义了实现的方法。现在,我将留空) 这是一个示例编校path:[req.headers[“Contet typ
path:[req.headers[“Contet typr”]
现在,编校路径显然是不正确的,但无法确定,除非制定了特定的req,并且在某个地方实现了记录器
考虑一个场景,其中存在设置为全局拦截器的拦截器(例如日志拦截器)。下面的一个是日志拦截器,它尝试对“content type”头进行编校,但由于编校数组路径不正确,这将导致引发运行时异常
@Injectable()
export class LoggingInterceptor implements NestInterceptor{
constructor(private readonly logService: PinoLoggerService) {
}
intercept(context: ExecutionContext, next: CallHandler<any>): Observable<any> | Promise<Observable<any>> {
const headers = context.switchToHttp().getRequest().headers;
console.log('Logging the incoming req', headers);
return next.handle();
}
}
@Injectable()
导出类LoggingInterceptor实现NestInterceptor{
构造函数(专用只读日志服务:PinoLoggerService){
}
拦截(context:ExecutionContext,next:CallHandler):可观察的承诺{
const headers=context.switchToHttp().getRequest().headers;
log('记录传入的请求',标题);
返回next.handle();
}
}
捕获这些异常的方法是通过异常过滤器,而不是通过Interceptor.catchError
export class CustomExceptionFilter implements ExceptionFilter {
catch(exception: any, host: ArgumentsHost): any {
console.log('coming in first filter');
const errModel = new ErrorModel('AppErrorType');
errModel.name = exception.name;
errModel.errorMessage = exception.message;
errModel.errorCode = '500';
errModel.errorFields = null;
errModel.reason = 'Internal server failure';
errModel.stack = exception.stack;
exception['errorModel'] = errModel;
console.log('exce:', exception);
const reply: FastifyReply<any> = host.switchToHttp().getResponse();
reply.send({error: errModel}).status(parseInt(errModel.errorCode));
}
}
导出类CustomExceptionFilter实现ExceptionFilter{
catch(异常:any,主机:ArgumentsHost):any{
log('进入第一个过滤器');
const errModel=new ErrorModel('AppErrorType');
errModel.name=exception.name;
errModel.errorMessage=异常.message;
errModel.errorCode='500';
errModel.errorFields=null;
errModel.reason='内部服务器故障';
errModel.stack=exception.stack;
异常['errorModel']=errModel;
console.log('exce:',异常);
const reply:fastfyreply=host.switchToHttp().getResponse();
reply.send({error:errModel}).status(parseInt(errModel.errorCode));
}
}
希望这有帮助
export class CustomExceptionFilter implements ExceptionFilter {
catch(exception: any, host: ArgumentsHost): any {
console.log('coming in first filter');
const errModel = new ErrorModel('AppErrorType');
errModel.name = exception.name;
errModel.errorMessage = exception.message;
errModel.errorCode = '500';
errModel.errorFields = null;
errModel.reason = 'Internal server failure';
errModel.stack = exception.stack;
exception['errorModel'] = errModel;
console.log('exce:', exception);
const reply: FastifyReply<any> = host.switchToHttp().getResponse();
reply.send({error: errModel}).status(parseInt(errModel.errorCode));
}
}