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

React前端提交内容报celebrate request validation failed错误如何解决

问题原因
  • 核心原因是后端使用celebrate(基于Joi的校验中间件)配置的请求体校验规则中,没有声明允许接收file字段,Joi默认会拒绝所有未在规则中定义的额外字段,因此只要请求携带file参数就会触发校验失败。
  • 次要原因:前端提交逻辑中无论用户是否选择了媒体文件,都会固定往FormData中追加file字段,所以哪怕只提交纯文本也会触发校验报错。
解决方法

第一步:修改后端校验规则

在celebrate的BODY校验配置中新增可选的file字段,适配单文件上传的场景:

router.post(
  '/',
  ensureAuthorization('user'),
  ensureFiles('file', false),
  resize,
  celebrate({
    [Segments.BODY]: {
      text: Joi.string().required(),
      // 新增file字段定义,设为可选,允许空值
      file: Joi.any().optional(),
    },
  }),
  storiesController.create,
);

如果需要更严格的媒体文件类型校验,也可以替换为针对性规则:

file: Joi.object({
  mimetype: Joi.string().valid('image/jpeg', 'image/png', 'video/mp4').optional()
}).unknown(true).optional()

第二步:优化前端提交逻辑(可选但推荐)

仅当用户选中了有效媒体文件时,才往FormData中追加file字段,避免传递无效的空值字段:

const formData = new FormData();
formData.append('text', data.text);
// 新增判断,只有fileImage存在时才追加字段
if (fileImage) {
  formData.append('file', fileImage);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:57:06