typescript - NestJS 中数据传输对象的目的是什么?

标签 typescript nestjs dto data-transfer-objects

我正在努力解决一个问题。我正在关注 NestJS 的文档。 NodeJS 的后端框架。该文档提到了 DTO(数据传输对象)。我创建了一个用于创建用户的 DTO:

export class CreateUserDto {
    readonly email: string;
    readonly password: string;
}

结合这个:
@Post('create')
createUser(@Body() userData: CreateUserDto): User {
    return this.usersService.createUser(userData);
}

出于某种原因,我可以使用任何类型的正文向此路线发出发布请求。我可以在正文中放置任何类型的信息而不会出错。这样一个 DTO 的全部意义在于只允许 body 中的某些信息,对吗?除了使用导出类 CreateUserDTO,我还尝试了导出接口(interface) CreateUserDTO,但这也不起作用。我也是 typescript 和 NestJS 的新手。有没有人可以解释为什么它没有按我预期的方式工作或者这样的数据传输对象的目的是什么?

最佳答案

DTO 本身更多的是为开发人员和使用 API 的人提供指导,以了解请求正文期望的形状,它实际上并不运行任何验证 独立 .但是,使用 Typescript,您可以从 class-validator 添加装饰器。库并使用 built-in ValidationPipe并对传入的请求进行验证,以便只有预期的请求正文才能进入。

简而言之,DTO 是请求应该是什么样子的定义,但是由于 JavaScript 是一种动态语言,您可以发送任何内容。这就是为什么像 class-validator 这样的库和 runtypes存在。

关于typescript - NestJS 中数据传输对象的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59397687/

相关文章:

javascript - tsconfig.json : not input were found in config file?

angular - *ngFor 在 Angular 2 中失败

cookies - 无法在 NestJS GraphQL 中设置 cookie

node.js - 返回 POST 请求响应后运行方法

c# - automapper 文档不完整

Java:使用非默认构造函数实例化通用对象

java - 如何将DTO解析为Pojo对象

typescript 联合类型一致性

NestJS/TypeORM - 连接到多个数据库 - ConnectionNotFoundError

javascript - 我如何找到 typescript 版本支持的 ecmascript 版本列表?