如何将这个 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();
要将 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
。