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

Node.js使用multer.memoryStorage上传文件返回404错误如何解决?

问题原因
  • 核心原因是你新增的instructorController.createLecture中间件未调用next()方法。Express 路由的中间件为顺序执行机制,只有当前中间件主动调用next()后,才会进入下一个中间件或路由处理函数。如果createLecture既没有返回响应,也没有调用next(),请求会被挂起,最终被全局404捕获逻辑返回404错误,和multer.memoryStorage的配置本身无关。
  • 次要排查点:确认instructorController.createLecture内部没有主动返回404响应,比如参数校验不通过、权限校验失败时直接返回了404状态码。
修复方案
  1. 修正instructorController.createLecture中间件逻辑
    如果你需要在上传文件后先执行createLecture的业务逻辑(比如把内存中的文件上传到谷歌云存储、写入业务数据到数据库),处理完成后调用next()进入后续的响应逻辑即可,示例如下:
// instructorController.js 中的 createLecture 逻辑参考
const createLecture = async (req, res, next) => {
  try {
    // 从req.file中获取memoryStorage存储的文件内容
    const fileBuffer = req.file.buffer;
    const fileName = req.file.originalname;
    // 此处填写上传到谷歌云存储的业务逻辑
    // 其他业务逻辑比如写入课程数据到数据库
    // 处理完成后调用next()进入后续响应逻辑
    next();
  } catch (err) {
    // 出错时直接返回错误响应即可
    return res.status(500).json({status: 'ERROR', msg: err.message});
  }
}
  1. 调整路由结构(可选)
    如果createLecture已经处理完所有业务逻辑,可以直接在createLecture内部返回响应,不需要再写后续的匿名响应函数,避免重复响应:
router.post("/lecture", upload.single('file'), instructorController.createLecture);
  1. 快速验证方法
    可以临时注释掉instructorController.createLecture中间件,测试路由是否正常返回200,如果正常即可确认问题完全出在该中间件逻辑上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:00:03