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