有没有一种方法可以在NestJS中的decorator中获取请求上下文



我正试图构建一个装饰器来"log";请求信息

export const Tracking = () => {
return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
const method = descriptor.value;
descriptor.value = async function(...args: any[]) {
console.log(/** Request info */)
console.log(/** Headers, Body, Method, URL...*/)
return method.call(this, ...args);
}
}
}

并尝试在这样的控制器方法上使用它。

export class Controller {
@Get('/path')
@Tracking()
public async getData(@Headers('user') user: User) {
return this.service.getData(user.id);
}
}

如果这是不可能的,有没有一种方法可以将拦截器应用于控制器的某些方法
或者是否存在用于请求的线程级上下文?

谢谢!!

decorator由于decorator的身份而无法访问请求信息。它是一个高阶函数,用于为类、类成员、类方法或类方法参数设置元数据。这个元数据可以在运行时读取,但它基本上是在导入文件后立即调用和设置的。因此,无法在每个请求上调用decorator,甚至Nest的@Body()@Req()在导入时被调用,在请求时被读取(实际上更早,但这不是重点(。

你在这里寻找的听起来更像是一个拦截器,就像Micael Levi和hoangdv已经提到的那样。Nest文档显示了一个基本的日志记录示例,还有一些包,如@ogma/nestjs模块(免责声明:我是作者(,可以为您处理此请求日志记录/跟踪,包括添加相关性ID。

最新更新