我正在开发一个 NestJS 应用程序,其中我的服务并不总是由控制器或任何 http 请求调用。相反,某些服务由 cron 计划调用来定期获取数据。
在这种情况下处理错误的最佳方法是什么?我实现了一个“catch-all”异常过滤器,但是当我的服务被“内部”调用(不是由控制器/请求)时,错误不会被捕获,并且我有一个未捕获的承诺错误。
在这里查看我的问题:在装饰器中使用全局嵌套模块
该装饰器捕获类方法的错误并记录它们。日志部分不是必需的,您可以实现自己的错误处理逻辑。
import { Inject } from '@nestjs/common';
import { LoggerService } from '../../logger/logger.service';
export function logErrorDecorator(bubble = false) {
const injectLogger = Inject(LoggerService);
return (target: any, propertyKey: string, propertyDescriptor: PropertyDescriptor) => {
injectLogger(target, 'logger'); // this is the same as using constructor(private readonly logger: LoggerService) in a class
//get original method
const originalMethod = propertyDescriptor.value;
//redefine descriptor value within own function block
propertyDescriptor.value = async function(...args: any[]) {
try {
return await originalMethod.apply(this, args);
} catch (error) {
const logger: LoggerService = this.logger;
logger.setContext(target.constructor.name);
logger.error(error.message, error.stack);
// rethrow error, so it can bubble up
if (bubble) {
throw error;
}
}
};
};
}
Run Code Online (Sandbox Code Playgroud)
使用这个装饰器,您可以简单地将 logErrorDecorator() 添加到您的服务类方法中
| 归档时间: |
|
| 查看次数: |
3400 次 |
| 最近记录: |