Skip to content

koa 整合 zod

nodejs
koa
zod

Zod

Zod 是一个用于 TypeScript 和 JavaScript 的数据验证库。

bash
pnpm add zod

定义类型校验实体,并且通过 zod.parse() 方法进行校验。

ts

export const PageSchema = z.object({
  page: z.coerce.number().default(1),
  pageSize: z.coerce.number().default(10),
})

export const BaseSchema = z.object({
  create_by: z.coerce.number().optional(),
  update_by: z.coerce.number().optional(),
  create_time: z.coerce.date().optional(),
  update_time: z.coerce.date().optional(),
  delete_time: z.coerce.date().optional().or(z.null()),
})

export const UserSchema = z.object({
  user_id: z.coerce.number({ message: "userId 必须为数字" }).optional(),
  username: z.string().default(""),
  role: z.string().default("user"),
  sex: z.string().default("保密"),
  birthday: z.coerce.date().optional().or(z.string()),
  phone: z.string().max(20),
  password: z.string(),
  status: z.coerce.boolean().default(true),
  ...BaseSchema.shape,
})
ts

import type { ZodObject } from 'zod';

export function parseBySchema<T>(params: any, schema: ZodObject<any>): T {
  try {
    return schema.parse(params) as T
  } catch (error) {
    console.log(error.issues)
    throw new Error(`${error.issues[0].path} ${error.issues[0].message}`)
  }
}