Nest.js 如何使用 class-validator 和 class-transformer?

推荐答案

在 Nest.js 中使用 class-validatorclass-transformer 可以通过以下步骤实现:

  1. 安装依赖: 首先需要安装 class-validatorclass-transformer 这两个库。

  2. 创建 DTO(Data Transfer Object): 使用 class-validator 装饰器来定义验证规则。

    -- -------------------- ---- -------
    ------ - --------- ------ ---- --- - ---- ------------------
    
    ------ ----- ------------- -
      -----------
      ----- -------
    
      --------
      --------
      ---------
      ---- -------
    -
  3. 在控制器中使用 DTO: 在控制器中使用 @Body() 装饰器来接收请求体,并使用 ValidationPipe 进行自动验证。

    -- -------------------- ---- -------
    ------ - ----------- ----- ----- --------- -------------- - ---- -----------------
    ------ - ------------- - ---- ------------------------
    
    --------------------
    ------ ----- --------------- -
      -------
      ------------- -----------------
      ------------------ -------------- -------------- -
        ------ ----- ---------
      -
    -
  4. 全局使用 ValidationPipe: 可以在 main.ts 中全局应用 ValidationPipe,这样就不需要在每个控制器中单独使用 @UsePipes

    -- -------------------- ---- -------
    ------ - ----------- - ---- ---------------
    ------ - --------- - ---- ---------------
    ------ - -------------- - ---- -----------------
    
    ----- -------- ----------- -
      ----- --- - ----- ------------------------------
      ---------------------- ------------------
      ----- -----------------
    -
    ------------
  5. 使用 class-transformer 进行数据转换: 可以使用 class-transformer 对数据进行转换,例如将字符串转换为数字。

    -- -------------------- ---- -------
    ------ - --------- - ---- --------------------
    
    ------ ----- ------------- -
      -----------
      ----- -------
    
      ------------- ----- -- -- --------------- ----
      --------
      --------
      ---------
      ---- -------
    -

本题详细解读

1. class-validator 的作用

class-validator 是一个用于类属性验证的库,它通过装饰器的方式为类的属性添加验证规则。常见的装饰器包括 @IsString()@IsInt()@Min()@Max() 等。这些装饰器可以确保传入的数据符合预期的格式和范围。

2. class-transformer 的作用

class-transformer 是一个用于类实例转换的库,它可以将普通的 JavaScript 对象转换为类的实例,或者将类的实例转换为普通的 JavaScript 对象。常见的用法包括将字符串转换为数字、将日期字符串转换为 Date 对象等。

3. ValidationPipe 的作用

ValidationPipe 是 Nest.js 提供的一个内置管道,它可以自动对传入的请求数据进行验证。如果数据不符合验证规则,ValidationPipe 会抛出异常,并返回 400 Bad Request 响应。

4. 全局使用 ValidationPipe

通过在 main.ts 中全局应用 ValidationPipe,可以避免在每个控制器中重复使用 @UsePipes 装饰器。这样可以简化代码,并确保所有请求都经过验证。

5. 数据转换的常见场景

在实际开发中,前端传递的数据可能是字符串形式,但后端需要将其转换为数字或其他类型。这时可以使用 class-transformer@Transform 装饰器来实现数据转换。例如,将字符串形式的年龄转换为数字,并确保其符合最小值和最大值的限制。

通过结合 class-validatorclass-transformer,可以有效地对请求数据进行验证和转换,确保数据的完整性和正确性。

纠错
反馈