ACT丶流星雨 0798ae03ee no message
2026-01-29 18:28:32 +08:00

25 lines
743 B
TypeScript

import { Request, Response, NextFunction } from "express";
import { z, ZodTypeAny } from "zod";
import { zhCN } from "zod/locales";
z.config(zhCN());
export function validateFields(
shape: Record<string, ZodTypeAny>,
source: "body" | "query" | "params" = "body", // 默认校验 body
) {
const schema = z.object(shape);
return (req: Request, res: Response, next: NextFunction) => {
const data = req[source];
const parseResult = schema.safeParse(data);
if (!parseResult.success) {
const errors = parseResult.error.issues.map((issue) => `字段 ${issue.path.join(".")} ${issue.message}`);
console.error(errors);
return res.status(400).json({ message: "参数错误", errors });
}
next();
};
}