1.在全球范围内,您的
我正在尝试发送一个直接函数调用,并设置了DTO,但无法工作。这是我的控制器中的代码(Send是我的DTO(:
@Post('/Send')
async SendE(body: Send) {
const mail = await this.messageProducer.SendMessage(body);
return mail;
}
我在这里直接调用SendE函数:
@MessagePattern('Notification')
async readMessage(@Payload() message: any, @Ctx() context: KafkaContext) {
const messageString = JSON.stringify(context.getMessage().value);
const toJson = JSON.parse(messageString);
await this.SendE(toJson);
}
我想要";发送";DTO可以验证";toJson";,但它不起作用。我的DTO是这样的:
export class Send{
@IsString()
@ApiProperty({ required: true })
MessageID: string;
}
以下是toJson的样子:
{
MessageID: 123
}
如果我发送一个非字符串MessageID,它可以传递DTO。请帮助
您必须启用validationPipe
才能启用DTO,根据NestJS的文档,有两种方法。ValidationPipe
是从@nestjs/common
导出的。
1.在全球范围内,您的main.ts
:
// validate incoming requests
app.useGlobalPipes(
new ValidationPipe({
transform: true,
})
);
2.每个控制器
@Post()
@UsePipes(new ValidationPipe({ transform: true }))
async create(@Body() createCatDto: CreateCatDto) {
this.catsService.create(createCatDto);
}