ZOD 到 swagger API Dto 类用于 Nestjs swagger

问题描述 投票:0回答:1

如何将这个 zod 模式转换为 swagger 用户的 CountryDto ?我使用 Nestjs 和 zod 进行输入验证。使用 nesjs/swagger 包进行 swagger。

export const CountrySchema = z
  .object({
    name: z.string({
      required_error: 'Name is required',
      invalid_type_error: 'Name is invalid',
    }),
    iso2: z.string({
      required_error: 'iso2 is required',
      invalid_type_error: 'iso2 is invalid',
    }),
    iso3: z.string({
      required_error: 'iso3 is required',
      invalid_type_error: 'iso3 is invalid',
    }),
    dialCode: z.string({
      required_error: 'dialCode is required',
      invalid_type_error: 'dialCode is invalid',
    }),
    flagUrl: z.string({
      required_error: 'flagUrl is required',
      invalid_type_error: 'flagUrl is invalid',
    }),
  })
  .required();
swagger nestjs dto
1个回答
0
投票

要将 Zod 架构与 NestJS 和 Swagger 一起使用,您可以根据 Zod 架构创建一个 DTO(数据传输对象)类。以下是如何根据您的

CountryDto
定义
CountrySchema
类的示例:

import { IsString } from 'class-validator';
import { ApiProperty } from '@nestjs/swagger';
import { z } from 'zod';

export const CountrySchema = z
  .object({
    name: z.string({
      required_error: 'Name is required',
      invalid_type_error: 'Name is invalid',
    }),
    iso2: z.string({
      required_error: 'iso2 is required',
      invalid_type_error: 'iso2 is invalid',
    }),
    iso3: z.string({
      required_error: 'iso3 is required',
      invalid_type_error: 'iso3 is invalid',
    }),
    dialCode: z.string({
      required_error: 'dialCode is required',
      invalid_type_error: 'dialCode is invalid',
    }),
    flagUrl: z.string({
      required_error: 'flagUrl is required',
      invalid_type_error: 'flagUrl is invalid',
    }),
  })
  .required();

export class CountryDto {
  @ApiProperty()
  @IsString({ message: 'Name is invalid' })
  name: string;

  @ApiProperty()
  @IsString({ message: 'iso2 is invalid' })
  iso2: string;

  @ApiProperty()
  @IsString({ message: 'iso3 is invalid' })
  iso3: string;

  @ApiProperty()
  @IsString({ message: 'dialCode is invalid' })
  dialCode: string;

  @ApiProperty()
  @IsString({ message: 'flagUrl is invalid' })
  flagUrl: string;
}

在此示例中,我使用

@ApiProperty
中的
@nestjs/swagger
装饰器来提供 Swagger 元数据,并使用
@IsString
中的
class-validator
装饰器进行验证。
@IsString
中的错误消息设置为与 Zod 架构中的错误消息匹配。

现在,您可以在 NestJS 控制器中使用

CountryDto
进行输入验证和 Swagger 文档。确保您在应用程序中需要的地方导入并使用
CountryDto

© www.soinside.com 2019 - 2024. All rights reserved.