javascript - 如何在 Nest.js 中为 @Body 构建 DTO
问题描述
我是 Nest.js 的初学者,我发现它非常好。我阅读了官方文档并了解了 DTO。当我的身体是这样的时候:
{
"username" : "username",
"password" : "password"
}
然后我可以user.dto.ts
像这样简单地创建:
import { IsNotEmpty } from 'class-validator';
export class UserDTO {
@IsNotEmpty()
username: string;
@IsNotEmpty()
password: string;
}
然后我像这样在我的控制器中使用它。
@Post('login')
@UsePipes(new ValidationPipe())
login(@Body() data: UserDTO) {
return this.userService.login(data);
}
但我的问题是,如果我的身体是这样的会怎样。
{
"data": {
"username": "username",
"password": "password",
}
}
那么我需要在我的 ```user.dto.ts`` 文件中进行哪些修改才能使其正常工作?谢谢
解决方案
答案是:你不需要修改你的DTO
.
@Body()
装饰器还接受一个可选参数:@Body(path?: string)
.
这里的关键是要了解是做什么@Body()
的。@Body()
没有任何参数将返回req.body
对象。@Body('path')
将返回req.body.path
(或req.body['path']
. 有了这些知识,您可以传入'data'
,@Body('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);
}
推荐阅读
- tensorflow - SeqSelfAttention 中的注意力宽度度量如何?
- parameters - flask_swagger_ui:“隐藏”参数属性被忽略
- python - 如何使用 PyCharm 调试 dockerized Django 应用程序
- angularjs - angularjs 与 webpack 5 自动重新编译
- javascript - 拒绝后重新提示用户访问相机
- sorting - Google Apps 脚本中的升序排序
- hadoop - Apache Hadoop 集群显示两个 NameNode 作为备用
- android - 停止 Jetpack Compose 指针InteropFilter 使用输入事件
- python - Python Selenium:遍历每个菜单页面并转到页脚并使用 POM 遍历页脚链接
- c# - 用于可执行部分的 Roslyn CSharpSyntaxWalker(基于可达代码块行走)