【问题标题】:multer middleware does not recognize body of reqmulter 中间件无法识别 req 的主体
【发布时间】:2021-08-25 10:20:12
【问题描述】:
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, "public/images");
  },
  filename: (req, file, cb) => {
    console.log(req.body); // <- This will output null object
    cb(null, file.originalname);
  },
});

const upload = multer({ storage });
app.post("/api/upload", upload.single("file"), (req, res) => {
  try {
    return res.status(200).json(req.body);
  } catch (err) {
    console.log(err);
  }
});

邮递员要求:

控制台输出:

>>>>>>>>>>>>>SERVER STARTED<<<<<<<<<<<<<
(node:3741192) [MONGODB DRIVER] Warning: Top-level use of w, wtimeout, j, and fsync is deprecated. Use writeConcern instead.
(node:3741192) DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead.
Connected to MongoDB
[Object: null prototype] {}
::1 - - [08/Jun/2021:12:11:21 +0000] "POST /api/upload HTTP/1.1" 200 23

我的问题是:

  filename: (req, file, cb) => {
    console.log(req.body); // <- This will output null object
    cb(null, file.originalname);
  },

req.body 是一个空对象。但它不应该吗?在邮递员请求中,我包含了一个 name 属性。

【问题讨论】:

    标签: javascript node.js file-upload multer


    【解决方案1】:

    来自multer documentation

    请注意,req.body 可能尚未完全填充。这取决于 根据客户端向服务器传输字段和文件的顺序。

    因此,更改邮递员表单中的顺序并将name 放在file 之前(您可以简单地拖放行)将解决问题。

    【讨论】:

    • 效果很好,谢谢。但我正在关注一个教程,这是做教程的人使用的顺序。这对他有用。有什么不同的原因吗?
    • 好问题,不知道是什么原因,抱歉。
    猜你喜欢
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2021-04-08
    • 2011-05-08
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多