Skip to content

如何使用DTO

在开始使用之前,我们先安装依赖。

sh
$ npm install --save class-validator class-transformer

TIP

当你导入你的 DTO 时,你不能使用仅类型的导入,因为类型会在运行时被擦除,记得用 import { GetDemoDetailDto } 而不是 import type { GetDemoDetailDto }

现在我们可以在 GetDemoDetailDto 中添加一些验证规则。我们使用 class-validator 包提供的装饰器来实现这一点,这里有详细的描述。以这种方式,任何使用 GetDemoDetailDto 的路由都将自动执行这些验证规则。

ts
import { IsEmail, IsNotEmpty } from 'class-validator'

export class GetDemoDetailDto {
  @IsEmail()
  email!: string

  @IsNotEmpty()
  id!: string
}

我们来使用一下上面刚创建的 GetDemoDetailDto

ts
@Controller('/demo')
export class DemoController {
  @GetMapping('detail')
  async getDemoDetail(demoDetailDto: GetDemoDetailDto) {
    return demoDetailDto
  }
}

有了这些规则,当客户端使用无效 email 执行对我们的接口的请求时,为了营造良好的体验环境,应用程序会在控制台输出错误信息。以便开发者在调试过程中发现接口字段错误等常见问题。避免参数错误经常询问服务端,造成极大的时间成本。

TIP

在实际业务开发中,接口参数 or 接口参数类型传递错误非常常见。所以我们强烈建议在开发过程中使用 DTO 来规范接口参数。后期维护也会带来质的飞跃。