Javascript 如何在Nest.js中为@Body构建DTO

Javascript 如何在Nest.js中为@Body构建DTO,javascript,nestjs,typeorm,Javascript,Nestjs,Typeorm,我是Nest.js的初学者,我发现它非常好。我阅读了官方文件,了解了DTO。当我的身体是这样的: { “用户名”:“用户名”, “密码”:“密码” }答案是:您不需要修改DTO @Body()装饰器还接受一个可选参数:@Body(path?:string) 这里的关键是理解@Body()的作用@Body()不带任何参数将返回req.Body对象@Body('path')将返回req.Body.path(或req.Body['path']。有了这些知识,您可以在@Body('data')中传递'

我是Nest.js的初学者,我发现它非常好。我阅读了官方文件,了解了DTO。当我的身体是这样的:

{
“用户名”:“用户名”,
“密码”:“密码”

}
答案是:您不需要修改
DTO

@Body()
装饰器还接受一个可选参数:
@Body(path?:string)

这里的关键是理解
@Body()
的作用
@Body()
不带任何参数将返回
req.Body
对象
@Body('path')
将返回
req.Body.path
(或
req.Body['path']
。有了这些知识,您可以在
@Body('data')
中传递
'data'
,它将返回
req.Body.data
,这将是您的
DTO

@Post('login')
@UsePipes(new ValidationPipe())
login(@Body('data') data: UserDTO) {
   // data will be your req.body.data which is your UserDTO
   return this.userService.login(data);
}

您可以创建一个包装器类,该类将携带您的数据,例如

export class Data<T> {

  @ApiModelProperty()
  readonly data: T;

  constructor(data: any = {}) {
    this.data = data;
  }
}
@Post('login')
@UsePipes(new ValidationPipe())
login(@Body() data: Data<UserDTO>) {
 return this.userService.login(data);
}
return new Data(this.userDto);