Javascript 如何将文件名从multer传递到另一个中间件?

Javascript 如何将文件名从multer传递到另一个中间件?,javascript,node.js,express,multer,Javascript,Node.js,Express,Multer,Multer获取我上传的文件并将其放入file对象中,这样我们可以通过文件访问它,但是req.body.image是空的,我希望能够将file.originalname作为存储磁盘位置的路径传递到req.body.image。现在,我正在处理多个文件,所以我想将它们的路径存储在req对象中,并在另一个中间件中访问它。 我试过这样的东西 req.body.image.push(`path/${file.originalname}`) 返回一个错误 TypeError:无法读取未定义的属性“pus

Multer获取我上传的文件并将其放入file对象中,这样我们可以通过文件访问它,但是
req.body.image
是空的,我希望能够将
file.originalname
作为存储磁盘位置的路径传递到
req.body.image
。现在,我正在处理多个文件,所以我想将它们的路径存储在req对象中,并在另一个中间件中访问它。 我试过这样的东西

req.body.image.push(`path/${file.originalname}`)
返回一个错误

TypeError:无法读取未定义的属性“push”

TypeError:无法读取未定义的属性“push”

当您使用
push()
时,它看起来像
req.body.image
不是一个数组,而是
undefined

当multer添加到请求对象时,它会将它们添加到
req.file
属性中。然后,您可以访问后续中间件中的
req.file
,如下面的示例所示。如果有,那么您将访问文件数组
req.files
,并遍历集合以访问每个文件对象

在上面的代码中,您正在修改
req.body
对象并添加属性
image
,我不建议更改
req.body
对象。最好不要修改请求头或请求体之类的内容。相反,您可以向请求对象添加一个新属性
req.image

下面的示例使用路由器中间件来封装上载逻辑(通常应保持为单个路由),然后将该中间件添加到Express服务器

imageUploadRouter.js server.js
谢谢,这很有帮助。
// imageUploadRouter.js
const router = require('express').Router()
const multer = require('multer')
const upload = multer({dest: 'uploads/'})

router.use(upload.single('image'))
router.use((req, res, next) => {
  if (!Array.isArray(req.image)) {
    req.image = []
  } 

  if (req.file) {
    req.image.push(`path/${req.file.originalName}`)
  }

  return next()
})

// add some additional routes for logic
router.post('/', (req, res) => {
  // do something and respond
  // you can access req.image here too
  return res.sendStatus(201)
})

module.exports = router
// server.js
const express = require('express')
const ImageUploadRouter = require('./imageUploadRouter')

const server = new Express()
const port = process.env.PORT || 1337

server.use('/images', ImageUploadRouter)
server.listen(port, () => console.log(`Lisening on ${port}`))