как вы sh обработали данные для перечисления и после этого отправили ответ от express? - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь изменить размер и загрузить несколько файлов, используя multer. Это работает, но проблема в том, что когда я отправляю данные обратно, они отправляются еще до обработки данных. Итак, я получаю пустой список. Я новичок в nodejs пробовал решения онлайн, но не смог найти подходящее для меня. Может ли кто-нибудь помочь мне решить эту проблему? Как мне отправить sh данные в список перед отправкой ответа?

код Прикреплен ниже ...

router.post('/ads/images', upload.array('images',5), async(req,res)=>{
console.log(req.files);

var data = []
await req.files.every(async(file)=>{
    var imageBuffer = await sharp(file.buffer).png().resize({
        width:250,
        fit: sharp.fit.cover,
        position: sharp.strategy.entropy
    }).toBuffer()
    var thumbnailBuffer = await sharp(file.buffer).png().resize({
        width:150,
        height:150,
        fit: sharp.fit.cover,
        position: sharp.strategy.entropy
    }).toBuffer()
    console.log({imageBuffer,thumbnailBuffer});

    data.push({imageBuffer,thumbnailBuffer})
})



console.log(data);

res.send(data)
},(error,req,res,next)=>{
    res.status(400).send({error:error.message})
})

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Ваш ожидающий вызов ничего не делает, потому что every не является асинхронным. Переключитесь с every на map, затем используйте Promise.all(..), чтобы дождаться завершения всех обещаний, возвращаемых map:

await Promise.all(req.files.map(async(file) => {
  // ...
}))
0 голосов
/ 04 апреля 2020

Проблема в каждом вашем методе. Используйте регулярные циклы в асинхронных c методах.

Пожалуйста, используйте вместо этого регулярное значение для l oop и применяйте один раз только резкие преобразования.

for(let file of req.files) {
   (your code here)
}

Использование async / await с forEach l oop

...