You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS Express中Celebrate中间件full模式不生效如何获取全量校验错误

解决方案

你的配置参数位置错误,且未关闭Joi默认的提前终止校验逻辑,调整后即可一次性返回所有字段的校验错误:

正确配置代码

const insert = celebrate({
  [Segments.BODY]: Joi.object().keys({
    nome: Joi.string().required().max(255),
    ativo: Joi.string().required().max(1),
    descricao: Joi.string().required().max(255),
  })
}, {
  // Joi校验配置:关闭遇到第一个错误就终止校验的规则,遍历校验所有字段
  abortEarly: false
}, {
  // Celebrate配置:返回全量校验错误信息
  mode: 'full'
});

配套全局错误处理(可选)

如果需要统一格式化返回的错误结构,可以在所有路由之后添加Express全局错误处理中间件,批量提取所有错误字段:

app.use((err, req, res, next) => {
  // 捕获Celebrate抛出的校验错误
  if (err.joi) {
    const errorList = err.joi.error.details.map(item => ({
      field: item.path.join('.'),
      message: item.message
    }));
    return res.status(400).json({
      msg: '参数校验失败',
      errors: errorList
    });
  }
  // 其他业务错误处理
  res.status(err.status || 500).json({
    msg: err.message || '服务器内部错误'
  });
});
  • abortEarly是Joi内置配置,默认值为true,遇到第一个不满足规则的字段就直接终止校验,这是你之前每次仅返回单个字段错误的核心原因
  • mode: 'full'是Celebrate的配置,开启后会将所有校验路径(body、params、query等)的错误全部返回,不会只返回首个校验失败路径的错误

内容的提问来源于stack exchange,提问作者Ronnei Peterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:45:07