Ошибка: невозможно установить заголовки после их отправки клиенту - PullRequest
0 голосов
/ 08 июня 2019

Я кодирую Promise.all, он загружает около 20 строк из дБ при запуске, останавливается

Мой код

router.get('/', (req, res) => {
  var cat = res.locals.lcCategories;

Promise.all([postModel.getTop10View(),postModel.getTop10latest()]).then(data => {
    console.log(data);
    return res.render('home');
  }).catch(next);

});

Ошибка:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:470:11)
    at ServerResponse.header (C:\Users\tranh\Desktop\Web2-News\node_modules\express\lib\response.js:767:10)
    at ServerResponse.send (C:\Users\tranh\Desktop\Web2-News\node_modules\express\lib\response.js:170:12)
    at done (C:\Users\tranh\Desktop\Web2-News\node_modules\express\lib\response.js:1004:10)
    at Immediate.<anonymous> (C:\Users\tranh\Desktop\Web2-News\node_modules\express-handlebars\lib\utils.js:26:13)
    at runCallback (timers.js:705:18)
    at tryOnImmediate (timers.js:676:5)
    at processImmediate (timers.js:658:5)

enter image description here

1 Ответ

0 голосов
/ 09 июня 2019

У меня была такая же проблема, в основном эта ошибка возникает, когда ваш API уже отправил ответ, но из-за возможности асинхронного выполнения nodejs или из-за потерянного цикла он снова отправляет ответ, я думаю, что Promise.all запущен, а запрос все еще отправляется, и когда promise.all возвращается из цикла, он снова отправляет запрос. Используйте ожидание перед обещанием. Все как

await Promise.all([postModel.getTop10View(),postModel.getTop10latest()]).then(data => {
        console.log(data);
        return res.render('home');
      }).catch(next);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...