当用户创建作为模型的 center
时,我尝试上传多个图像,并且因为我想控制图像,所以它有自己的模型,称为 media
。>
// Create an event center
router.post('/api/center', isVerified, upload.array('images', 15), async (req, res) => {
const files = req.files.buffer
const center = new Center({
...req.body,
owner: req.user._id,
isOpen: true,
})
console.log("initialized center")
try {
files.forEach(async (file) => {
const buffer = await sharp(file)
.jpeg({
quality: 100,
chromaSubsampling: '4:4:4',
force: true
})
.toBuffer()
const params = {
Bucket: process.env.AWS_BUCKET_NAME,
Key: `${uuidv4()}.jpeg`,
Body: buffer
}
console.log("about to upload to s3")
const data = await s3.upload(params).promise()
const med = new Media({
url: data.Location,
owner: req.user._id
})
await med.save()
console.log(`${med.url} saved`); //added check to see if photo uploaded
center.media.addToSet(med.id)
})
console.log("upload completed")
await center.save()
console.log("saved")
res.status(201).send(center)
} catch (e) {
console.log("failed", e);
res.status(500).send(e)
}
})
当我尝试创建一个中心并包含图像时,我遇到了错误
Server is up on port 3000
initialized center
failed TypeError: Cannot read property 'forEach' of undefined
at D:\odede\Documents\Nodejs\eventCenter\src\routers\center.js:24:26
at Layer.handle [as handle_request] (D:\odede\Documents\Nodejs\eventCenter\node_modules\express\lib\router\layer.js:95:5)
at next (D:\odede\Documents\Nodejs\eventCenter\node_modules\express\lib\router\route.js:137:13)
at Array.<anonymous> (D:\odede\Documents\Nodejs\eventCenter\node_modules\multer\lib\make-middleware.js:53:37)
at listener (D:\odede\Documents\Nodejs\eventCenter\node_modules\on-finished\index.js:169:15)
at onFinish (D:\odede\Documents\Nodejs\eventCenter\node_modules\on-finished\index.js:100:5)
at callback (D:\odede\Documents\Nodejs\eventCenter\node_modules\ee-first\index.js:55:10)
at IncomingMessage.onevent (D:\odede\Documents\Nodejs\eventCenter\node_modules\ee-first\index.js:93:5)
at IncomingMessage.emit (events.js:314:20)
at IncomingMessage.EventEmitter.emit (domain.js:486:12)
at endReadableNT (_stream_readable.js:1244:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21)
请问哪里出了问题,或者我可能遗漏了什么?
答案 0 :(得分:1)
由于您将 file
直接传递给 sharp
,您可能打算将 files
映射到缓冲区:
const files = req.files.map(file => file.buffer)