NestJS 使用 class-transform 示例验证 Headers
NestJS Validate Headers using class-transform example
我正在尝试验证请求的 headers 是否包含一些特定数据,并且我正在使用 NestJS。我找到了这个 information。虽然这是我想要做的,而且看起来不错,但 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;
},
);
与其像这样通过装饰器传递类型,我建议创建一个自定义装饰器并将 ValidationPipe
的 validateCustomDecorators
选项设置为 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
到 运行元数据
我正在尝试验证请求的 headers 是否包含一些特定数据,并且我正在使用 NestJS。我找到了这个 information。虽然这是我想要做的,而且看起来不错,但 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;
},
);
与其像这样通过装饰器传递类型,我建议创建一个自定义装饰器并将 ValidationPipe
的 validateCustomDecorators
选项设置为 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
到 运行元数据