Экспресс не отправляет ответ после завершения массовой вставки - PullRequest
0 голосов
/ 26 октября 2019

Реализация массовой вставки в mongodb с помощью мангуста. Данные успешно сохраняются в БД, но экспресс не отправляет ответ обратно.

Пробовал, используя insertMany, также пытался bulkWrite

try {
  await Collection.insertMany(docsToBeInserted);
  console.log("Insert Successful");
  res.status(200).send('ok'); 
} catch(err) {
  res.status(500).json({err})
}

Вставить Успешно получает печать ивсе документы успешно вставлены в базу данных, но в клиенте вызов никогда не завершается, через некоторое время вызов завершается с ошибкой ERR_EMPTY_RESPONSE

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Обычно я рассматриваю этот конкретный случай следующим образом:

return Collection.insertMany(docsToBeInserted)
.then(res => {
     res.status(200).send('ok');
})
.catch(err => {
     res.status(500).json({ err })
});

Я удалил async-await и использовал Promise, возвращаемый insertMany для отправки ответа apt в соответствии с вашим примером кода.

Вы также можете заменить res.status(200).send('ok') на res.send('ok'), так как Express установит статус Http на 200.

Я бы рекомендовал добавить оператор console.error(err) к вашей обработке ошибок в коде для трассировки стека.

0 голосов
/ 26 октября 2019

Вы можете сохранить результат insertMany в переменной и отправить его в виде ответа, подобного этому:

try {
  const response = await Collection.insertMany(docsToBeInserted);
  console.log("Insert Successful");
  return res.status(200).send(response.data);
} catch (err) {
  return res.status(500).json({ err })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...