node.js - 为什么我无法使用 multer 访问 req.body?

标签 node.js express vue.js multer

我的应用程序(使用 vue)允许用户将包含一些数据信息的文件上传到我的 Node 后端。当用户提交表单时,会触发此函数:

methods: {
      buttonOK () {
        const formData = new FormData()

        formData.append('name', this.detailFirm.name)
        formData.append('description', this.detailFirm.description)
        formData.append('version', this.detailFirm.version)
        formData.append('date', this.detailFirm.date)
        formData.append('file', this.file)

        for (var [key, value] of formData.entries()) {
          console.log(key, value)
        }

        let headers = {
          'Content-Type': 'multipart/form-data',
          'Accept': 'multipart/form-data'
        }

        this.$http.put('/firmware', formData, {headers: headers})
        this.visible = false
      }

日志语句显示了它应该显示的所有内容,当发出此请求时,chrome 开发工具中的网络选项卡会显示正在经历的发布数据,并且它具有应有的所有值:

name: test
description: test
version: 1
date: 0555-05-05
file: (binary)

我的 multer 中间件如下所示:

const multer = require('multer')
const mult = multer({
  dest: '/firmware'
})

module.exports = function (req, res, next) {
  /* --Convert multipart/form-data to useable format within express-- */
  if (req.path === '/firmware') {
    mult.single('file')
    console.log('MULTER MIDDLEWARE')
  }
  next()
}

那里的日志语句有效,让我相信 multer 正在工作。
但我似乎无法在后端访问这些信息。在这里,我尝试了 fileformData 作为 mult.single('') 中的文件名。

这是我的 Controller 功能:

let firmware = {
    name: req.body.name,
    version: req.body.version,
    description: req.body.description,
    date: req.body.date,
    file: req.body.file
  }
  firmwareRepo.create(firmware, (err, create) => {
                   .............

我已经阅读了一些其他问题,并做了一些调整,但是当我在 Controller 中记录 req.body 时,我总是得到一个空对象。请指教。

最佳答案

https://github.com/expressjs/multer#diskstorage

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

关于node.js - 为什么我无法使用 multer 访问 req.body?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57896932/

相关文章:

javascript - nodejs elementtree npm xml解析与合并

node.js - Heroku 似乎构建了客户端,但我没有看到 dist 文件夹

javascript - 作为 Vue 插件的一部分将 Mutations 添加到 Vuex store

node.js - 获取 TypeError : undefined is not an object (evaluating '_mathjs.default.fraction' ), React-Native

javascript - JWT 子声明在验证期间被忽略

node.js - nodeJS/GitlabCI : How to serve decentralized productive application

node.js - 我可以使用express.js上传的文件名作为ID吗?

server.js 中的 Node.js 父路径

javascript - 如何在我的 Vue 组件中加载 OpenSeadragon 组件

typescript - 根据条件添加类