NestJS处理服务异常

NestJS处理服务异常,nestjs,Nestjs,我正在开发一个NestJS应用程序,在这个应用程序中,控制器或任何http请求都不会调用我的服务。相反,cron调度调用一些服务来定期获取数据 在这种情况下,处理错误的最佳方法是什么?我实现了一个“捕获所有”异常过滤器,但当我的服务被“内部”调用(不是由控制器/请求调用)时,错误不会被捕获,并且我有一个未捕获的承诺错误。请参见我的问题: 此装饰器捕获类方法的错误并记录它们。日志部分不是必需的,您可以实现自己的错误处理逻辑 从'@nestjs/common'导入{Inject}; 从“../../

我正在开发一个NestJS应用程序,在这个应用程序中,控制器或任何http请求都不会调用我的服务。相反,cron调度调用一些服务来定期获取数据

在这种情况下,处理错误的最佳方法是什么?我实现了一个“捕获所有”异常过滤器,但当我的服务被“内部”调用(不是由控制器/请求调用)时,错误不会被捕获,并且我有一个未捕获的承诺错误。

请参见我的问题:

此装饰器捕获类方法的错误并记录它们。日志部分不是必需的,您可以实现自己的错误处理逻辑

从'@nestjs/common'导入{Inject};
从“../../logger/logger.service”导入{LoggerService};
导出函数logErrorDecorator(气泡=false){
const injectLogger=注入(LoggerService);
return(target:any,propertyKey:string,propertyDescriptor:propertyDescriptor)=>{
injectLogger(目标'logger');//这与在类中使用构造函数(私有只读记录器:LoggerService)相同
//获取原始方法
常量originalMethod=propertyDescriptor.value;
//在自己的功能块内重新定义描述符值
propertyDescriptor.value=异步函数(…参数:任意[]){
试一试{
return wait originalMethod.apply(这个,args);
}捕获(错误){
const logger:LoggerService=this.logger;
setContext(target.constructor.name);
logger.error(error.message,error.stack);
//重新显示错误,使其冒泡
如果(气泡){
投掷误差;
}
}
};
};
}
使用此装饰器,您只需将logErrorDecorator()添加到服务类方法中即可

请参见我的问题:

此装饰器捕获类方法的错误并记录它们。日志部分不是必需的,您可以实现自己的错误处理逻辑

从'@nestjs/common'导入{Inject};
从“../../logger/logger.service”导入{LoggerService};
导出函数logErrorDecorator(气泡=false){
const injectLogger=注入(LoggerService);
return(target:any,propertyKey:string,propertyDescriptor:propertyDescriptor)=>{
injectLogger(目标'logger');//这与在类中使用构造函数(私有只读记录器:LoggerService)相同
//获取原始方法
常量originalMethod=propertyDescriptor.value;
//在自己的功能块内重新定义描述符值
propertyDescriptor.value=异步函数(…参数:任意[]){
试一试{
return wait originalMethod.apply(这个,args);
}捕获(错误){
const logger:LoggerService=this.logger;
setContext(target.constructor.name);
logger.error(error.message,error.stack);
//重新显示错误,使其冒泡
如果(气泡){
投掷误差;
}
}
};
};
}
使用这个decorator,您可以简单地将logErrorDecorator()添加到服务类方法中