Javascript 如何将文件名从multer传递到另一个中间件?
Multer获取我上传的文件并将其放入file对象中,这样我们可以通过文件访问它,但是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
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}`))