提交表单后页面没有任何变化,网络面板显示 422,响应体里有错误对象写着手机号格式不对,用户以为按钮没生效,又点了三次。乍看像缓存或者权限的锅,追下去往往不是。

if (!res.ok) {
  const {errors} = await res.json();
  showFieldErrors(errors);
}

追下去是这么回事:前端只判断响应里的成功标记,422 没有这个字段就走了默认分支,错误信息被丢掉。控制台也没有打印响应体。

「校验错误未展示」这类改动最怕改一半,回滚脚本先准备好,再动生产。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。

具体做法是,统一处理非 2xx 响应,把错误对象里的字段和消息映射到对应输入框;无法映射的给一条顶部汇总提示,别静默失败;用错误手机号提交一次,确认页面上能看到具体原因。

验收就看一点,422 提交后对应输入框下方显示具体错误,页面不再毫无反应。

作者 9823189