【问题标题】:NestJS: Set type of @Body()NestJS:设置@Body()的类型
【发布时间】:2019-10-03 14:57:39
【问题描述】:
鉴于以下情况:
@Post()
public async createPet(@Body() petDetails: PostPetDto): Promise<any> {
}
默认情况下@Bod() petDetails 的类型不是PostPetDto 的声明类型,而是plain/any。将它编组为类型的 NestJS 惯用方式是什么?
该类型包含应该运行的方法(例如验证)。
【问题讨论】:
标签:
javascript
typescript
express
nestjs
【解决方案1】:
import { ValidationPipe } from '@nestjs/common';
@Post()
@UsePipes(ValidationPipe)
public async createPet(@Body() petDetails: PostPetDto): Promise<any> {
}
或将其设置为全局范围
async function bootstrap() {
const app = await NestFactory.create(ApplicationModule);
app.useGlobalPipes(new ValidationPipe());
await app.listen(3000);
}
bootstrap();
看https://docs.nestjs.com/pipes
【解决方案2】:
ValidationPipe 不会自动将您的负载转换为相应的 DTO 类。开启此功能:
app.useGlobalPipes(
new ValidationPipe({
transform: true,
}),
);