我试图验证请求的头部是否包含一些特定的数据,并且我使用的是NestJS。我找到了这个信息。虽然这是我想要做的,而且它看起来是正确的,但是ClassType引用并不存在,我也不知道该使用什么。
从这个例子来看,装饰师指的是。
request-header.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;
},
);发布于 2021-03-31 18:30:41
与其通过这样的装饰器传递类型,我建议创建一个自定义装饰器,并将ValidationPipe的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运行。
https://stackoverflow.com/questions/66880749
复制相似问题