Почему в ответ на запрос в Postman получаю пустой объект?
Оправляю в Postman запрос на http://localhost:5000/api/ads/getAdverts . В ответ получаю пустой объект.
Тело запроса ниже:
[
"5fe999d60b26ea24e8423660",
"5fe9cf048cf16b2360bc9b49"
]
// getArrAdverts
adsRouter.get('/getAdverts', async (req,res) => {
const adsIdArr = req.body;
const result = []
adsIdArr.forEach(async (ad) => {
const selectedAd = await AdModel.findById(ad)
result.push(selectedAd)
})
if(!result) {
res.status(400).send({ error: 'Ads not found' });
return
} else {
res.status(200).send(result);
}
})
Ответы (1 шт):
Автор решения: nörbörnën
→ Ссылка
В
get-запросе нетbody, но естьquery. Вы показываете обработчик именноget-запроса.Нельзя так использовать асинхронные вызовы внутри
.forEach.
forEach - выполнит последовательно и синхронно свои колбеки и не будет ждать завершения асинхронных задач, задачи будут запущены, но выполнение пойдёт дальше к отправке ответа.
Делайте так (map создаст массив Promise, а await Promise.all дождётся их выполнения):
adsRouter.YOUR_HTTP_METHOD_NAME('/getAdverts', async (req,res) => {
const adsIdArr = HERE_YOUR_ADS_IDX;
const result = await Promise.all(
adsIdArr.map((ad) => AdModel.findById(ad))
);
res.status(200).json(result);
})