最近在看 Nestjs 有个问题想请教大家

2022-09-22 11:41:09 +08:00
 233373

之前是撸 DRF 那一套的,一般 API 的参数验证和数据返回都可以用 Serializer 来实现。

看了 nestjs 之后发现

  1. 参数验证使用 Dto 命名,文件名 auth.dto.ts ,class 名 AuthDto ,软件包用 class-validator
  2. 数据返回用 Entity ,文件类似 auth.entity.ts ,class 名 AuthEntity 软件包用 class-transformer

我在想如果我改成下面的命名是否可以

  1. 参数验证使用 Validator 命名,文件名 auth.validator.ts ,class 名 AuthValidator ,软件包用 class-validator
  2. 数据返回用 Serializer ,文件类似 auth.serializer.ts ,class 名 AuthSerializer 软件包用 class-transformer
1318 次点击
所在节点    程序员
8 条回复
encro
2022-09-22 12:01:57 +08:00
参数输入和输出都可以用 dto,dto 的全称是 data transfer object 。
你那个软件包是什么意思,建议详细了解 middleware 这一章。
validator 是对对象进行验证,可以得到错误信息,
transfermer 是对对象进行转换。
233373
2022-09-22 12:05:42 +08:00
@encro 我看官网的文档验证 https://docs.nestjs.com/techniques/validation 和序列化 https://docs.nestjs.com/techniques/serialization

我没太搞懂 dto 和 entity 的应用场景,对于 rest api 来说,只有输入和输出,不考虑异常的情况下
lzgshsj
2022-09-22 13:48:52 +08:00
你起啥名都无所谓啊,我是入参用的.dto.ts ,返回用的.vo.ts ,文件名不影响什么。
如果非要说影响,那就是 swagger 的自动生成需要改一下参数而已 https://docs.nestjs.com/openapi/cli-plugin#using-the-cli-plugin
233373
2022-09-22 13:51:14 +08:00
@lzgshsj 确实是这样的,不过还是想知道大家一般是如何定义的
encro
2022-09-22 13:51:42 +08:00
可以理解 dto 只是为了方便自动输出文档。

通常 entity 是和数据库打交道,定义的是数据库字段,
dto 是和输入输出打交道,定义输入输出格式字段。

你看到返回是 entity ,只是恰好需要返回数据库所有字段而已。

validator ,transformer 都是 middleware ,validator 用来处理输入,验证输入格式是否符合规范,transformer 用于将输出对象转换成规定格式。

所有,都按照英文基本意思来理解就可以了,先不用考虑那么多,上手做一两个项目慢慢掌握。
233373
2022-09-22 13:53:35 +08:00
@encro OK ,我先按照我自己的理解来,到后面对生态逐渐有了理解之后再慢慢修改完善
lmshl
2022-09-22 15:40:11 +08:00
validator 和 transformer 是不分家的,你用 validator 必然要用到 transformer ,除非你不写 nested struct

例子:
https://github.com/mingyang91/ticketing/blob/master/src/models.ts#L12
233373
2022-09-22 18:12:09 +08:00
@lmshl 应该是会用到的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/882103

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX