尝试使用 Node js

时间:2021-01-18 22:43:56

标签: node.js amazon-web-services

当用户创建作为模型的 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)

请问哪里出了问题,或者我可能遗漏了什么?

1 个答案:

答案 0 :(得分:1)

由于您将 file 直接传递给 sharp,您可能打算将 files 映射到缓冲区:

const files = req.files.map(file => file.buffer)