V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
233373
V2EX  ›  程序员

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

  •  
  •   233373 · 2022-09-22 11:41:09 +08:00 · 1308 次点击
    这是一个创建于 574 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前是撸 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
    encro
        1
    encro  
       2022-09-22 12:01:57 +08:00
    参数输入和输出都可以用 dto,dto 的全称是 data transfer object 。
    你那个软件包是什么意思,建议详细了解 middleware 这一章。
    validator 是对对象进行验证,可以得到错误信息,
    transfermer 是对对象进行转换。
    233373
        2
    233373  
    OP
       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
        3
    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
        4
    233373  
    OP
       2022-09-22 13:51:14 +08:00
    @lzgshsj 确实是这样的,不过还是想知道大家一般是如何定义的
    encro
        5
    encro  
       2022-09-22 13:51:42 +08:00
    可以理解 dto 只是为了方便自动输出文档。

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

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

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

    所有,都按照英文基本意思来理解就可以了,先不用考虑那么多,上手做一两个项目慢慢掌握。
    233373
        6
    233373  
    OP
       2022-09-22 13:53:35 +08:00
    @encro OK ,我先按照我自己的理解来,到后面对生态逐渐有了理解之后再慢慢修改完善
    lmshl
        7
    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
        8
    233373  
    OP
       2022-09-22 18:12:09 +08:00
    @lmshl 应该是会用到的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5706 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:38 · PVG 10:38 · LAX 19:38 · JFK 22:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.