如何访问nestjs管道中的标头?

如何访问nestjs管道中的标头?,nestjs,Nestjs,我正在编写一个验证管道,它需要从令牌获取某些信息,因此我必须以某种方式将头传递给验证管道。您似乎无法访问PipeTransform中的请求实例。如果需要访问请求实例,请使用 激活 上下文:ExecutionContext, :布尔值|承诺|可观察{ const request=context.switchToHttp.getRequest; 返回validateRequestrequest; } 您似乎无法访问PipeTransform中的请求实例。如果需要访问请求实例,请使用 激活 上下文:E

我正在编写一个验证管道,它需要从令牌获取某些信息,因此我必须以某种方式将头传递给验证管道。

您似乎无法访问PipeTransform中的请求实例。如果需要访问请求实例,请使用

激活 上下文:ExecutionContext, :布尔值|承诺|可观察{ const request=context.switchToHttp.getRequest; 返回validateRequestrequest; }
您似乎无法访问PipeTransform中的请求实例。如果需要访问请求实例,请使用

激活 上下文:ExecutionContext, :布尔值|承诺|可观察{ const request=context.switchToHttp.getRequest; 返回validateRequestrequest; }
如果需要访问管道中的标头,而标准@Headers装饰器与管道不兼容,则可以创建自定义装饰器以获取兼容的标头,因为自定义装饰器始终与管道一起工作

export const CustomHeaders=createParamDecoratordata:unknown,ctx:ExecutionContext=>{ const req=ctx.switchToHttp.getRequest; 返回数据?请求头[数据]:请求头; }
现在,如果需要访问管道中的头,管道将在@CustomHeaders上工作,而标准@Headers装饰器与管道不兼容,则可以创建自定义装饰器以获得兼容的头,因为自定义装饰器始终与管道一起工作

export const CustomHeaders=createParamDecoratordata:unknown,ctx:ExecutionContext=>{ const req=ctx.switchToHttp.getRequest; 返回数据?请求头[数据]:请求头; }
现在,您的管道将在@CustomHeaders上工作。要访问我的CustomPipe中的请求对象及其属性,我首先创建一个自定义装饰器:

request.decorator.ts

然后我在控制器中使用我的装饰器装饰我的CustomPipe:

mycontroller.ts


要访问CustomPipe中的请求对象及其属性,我首先创建一个自定义装饰器:

request.decorator.ts

然后我在控制器中使用我的装饰器装饰我的CustomPipe:

mycontroller.ts


我知道我可以通过警卫接近它,但这不是我想要的。防护是在管道之前执行的,因为我有一堆验证管道,所以我不想编写一个单独工作的验证防护。我知道我可以在防护中访问它,但这不是我想要的。防护在管道之前执行,因为我有一堆验证管道,所以我不想编写一个单独工作的验证防护。太棒了!这就是我需要的,太棒了!这就是我需要的。
import { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const ReqDec = createParamDecorator(
    (data: unknown, ctx: ExecutionContext) => {
        const request = ctx.switchToHttp().getRequest();
        return request;
    }
)
import { ReqDec } from '../../decorators/request.decorator';

@Get()
async get(@ReqDec(new CustomPipe()) request): Promise<any> 
{...}
import { Injectable, PipeTransform } from '@nestjs/common';

@Injectable()
export class CustomPipe implements PipeTransform {
  constructor() { }

  transform(request: any) {
    // you can use request, request.query, request.params, request.headers, ...
    return request;
  }
}