目标
客户端升级后集成报错,但只返回笼统的 422,没有字段级信息,难以排查。本配方让服务端返回按键路径结构化组织的校验错误,再用日志中的原始载荷复现,定位到具体字段(如 items.0.price),并在修复该字段后验证请求返回 200。
步骤要点
- 让校验器输出按 JSON 路径结构化的错误。
- 用日志中的原始载荷复现,确认错误具有确定性。
- 在 Schema 校验之后再加一层领域校验,捕获跨字段规则。
- 返回字段路径与安全文案,避免泄露内部细节。
const result = schema.safeParse(body);
if (!result.success) {
return res.status(422).json({
errors: result.error.issues.map(i => ({ path: i.path.join('.'), message: i.message })),
});
}
排错提示
- Schema 校验无法覆盖跨字段业务规则。
- 过细的错误可能帮助攻击者,需限定字段级。
- 校验器需保留数组下标。
适用边界
- 不覆盖跨字段业务规则。
- 错误信息需避免泄露堆栈。