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

NodeJS使用Multer更新带图片表单时无图片上传返回404错误问题

问题根因与解决方案

1 核心触发404的原因

你定义的PUT接口路径为/:id(默认无末尾斜杠),但axios请求的路径末尾多了多余的斜杠:${baseURL}products/${item.id}/。Express默认开启严格路由匹配规则时,/products/xxx和/products/xxx/会被识别为两个完全不同的路径,因此请求根本匹配不到你编写的PUT接口,直接返回404,这也是接口内日志完全不触发的直接原因。

2 修复步骤

第一步:修正请求路径

删掉axios请求路径末尾的斜杠,修改为:

axios.put(`${baseURL}products/${item.id}`, formData, config)

修改后先测试不带图片的请求是否能正常进入接口逻辑。

第二步:处理Multer可选文件上传兼容

如果修正路径后还是出现不带图片就无响应的问题,是因为你使用的uploadOptions.single('image')中间件,在formData完全没有image字段时,部分旧版本Multer会出现请求挂起的问题,可修改中间件逻辑兼容可选上传:

// 原有multer配置不变,调整路由中间件写法
router.put("/:id", (req, res, next) => {
  const isFormData = req.headers['content-type']?.includes('multipart/form-data');
  if (isFormData) {
    return uploadOptions.single('image')(req, res, next);
  }
  next();
}, async (req,res)=>{
  // 原有业务逻辑保持不变
})

第三步:检查axios配置

确认你传入的config参数没有手动设置Content-Type: multipart/form-data,axios会自动为formData类型的请求添加正确的请求头和boundary参数,手动添加反而会导致服务端无法解析请求体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 23:45:09