nestjs - NestJS 使用类转换示例验证标头
问题描述
我正在尝试验证请求的标头是否包含一些特定数据,并且我正在使用 NestJS。我找到了这个信息。虽然这是我想要做的,而且看起来很合适,但 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;
},
);
解决方案
我建议不要通过这样的装饰器传递类型,而是建议制作一个自定义装饰器并设置to的validateCustomDecorators
选项。装饰器看起来像ValidationPipe
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
在应用适当的类型元数据后运行
推荐阅读
- sql - 如何从 SQL *PLUS 中的批量插入中查找失败的插入语句
- .net - 如何为登录用户获取 Microsoft Graph 的访问令牌?
- css - CSS Grid min-content 不适合内容
- javascript - JavaScript 可以运行从服务器发送给它的代码吗?
- python - Pandas 中的并行字符串替换
- java - JDBC在android模拟器中工作但不在真实设备上?
- multithreading - 无锁链表
- python - Tensorboard DuplicateFlagError
- java - 如何修复我的加密/解密代码以进入文本文件
- hive - 我可以在创建表后使用 PARTITIONED BY 吗?