NestJS 使用类转换示例验证 header

标签 nestjs class-transformer

我正在尝试验证请求的 header 是否包含一些特定数据,并且我正在使用 NestJS。我找到了这个information 。虽然这就是我想要做的,而且看起来很正确,但 ClassType 引用不存在,而且我不确定该使用什么。

从示例中,装饰器指的是。

请求头.decorator.ts

import { createParamDecorator, ExecutionContext } from '@nestjs/commom'
import { plainToClass } from 'class-transformer';
// The import below fails
import { ClassType } from 'class-transformer/ClassTransformer';
import { validateOrReject } from 'class-validator';

export const RequestHeader = createParamDecorator(
  async (value:  ClassType<unknown>, ctx: ExecutionContext) => {

    // extract headers
    const headers = ctx.switchToHttp().getRequest().headers;

    // Convert headers to DTO object
    const dto = plainToClass(value, headers, { excludeExtraneousValues: true });
    
    // Validate 
    await validateOrReject(dto);

    // return header dto object 
    return dto;
  },
);

最佳答案

我建议不要通过这样的装饰器传递类型,而是建议创建一个自定义装饰器并将 ValidationPipevalidateCustomDecorators 选项设置为 true。装饰器看起来像

const Header = createParamDecorator((data: unknown, context: ExecutionContext) => {
  const req = context.switchToHttp().getRequest();
  if (data) {
    return req.headers[data];
  }
  return req.headers;
});

现在,您可以从此文件中使用 @Header() 来代替 @nestjs/common 中的 @Header() 并获取ValidationPipe 在应用适当的类型元数据后运行

关于NestJS 使用类转换示例验证 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66880749/

相关文章:

node.js - Nest 无法解析 PhotoService 的依赖项(?)

microservices - nestjs 微服务 - 有一个 clientProxy 将消息发布到任何微服务

passport.js - NestJS Fastify 身份验证

node.js - 通过 @IsInt() 验证 application/x-www-form-urlencoded 请求类型

validation - 在创建 DTO 期间执行验证之前,NestJS 使用 ValidationPipe 转换属性

node.js - NodeJS 将 Dtos 映射到 TypeORM 实体

javascript - 如何在 TypeScript 中将 API 请求的响应转换为带有 `class-transformer` 的类实例?

typescript - NestJS 无法解析 UsersModule 的依赖关系

mongodb - 将数据传递给服务时在 Controller 中验证 DTO

typescript - 类验证器是如何工作的?