V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
233373
V2EX  ›  程序员

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

  •  
  •   233373 · Sep 22, 2022 · 2005 views
    This topic created in 1317 days ago, the information mentioned may be changed or developed.

    之前是撸 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  
       Sep 22, 2022
    参数输入和输出都可以用 dto,dto 的全称是 data transfer object 。
    你那个软件包是什么意思,建议详细了解 middleware 这一章。
    validator 是对对象进行验证,可以得到错误信息,
    transfermer 是对对象进行转换。
    233373
        2
    233373  
    OP
       Sep 22, 2022
    @encro 我看官网的文档验证 https://docs.nestjs.com/techniques/validation 和序列化 https://docs.nestjs.com/techniques/serialization

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

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

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

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

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

    例子:
    https://github.com/mingyang91/ticketing/blob/master/src/models.ts#L12
    233373
        8
    233373  
    OP
       Sep 22, 2022
    @lmshl 应该是会用到的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2383 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 11:40 · PVG 19:40 · LAX 04:40 · JFK 07:40
    ♥ Do have faith in what you're doing.