NodeJS: уведомление клиента в режиме реального времени о времени последней загрузки - PullRequest
0 голосов
/ 01 ноября 2019

Пользователь может загружать данные через конечную точку my / upload HTTP (я кодирую ее с помощью NodeJS / Express). Мне нужно обновить веб-страницу (ReactJS) в режиме реального времени, чтобы показать время последней загрузки. Я попытался использовать SSE для этого и столкнулся с проблемой.

Это рабочий код, который загружает данные на сервер:

 const upload = async (req, res) => {
    try {
       // upload logic is here ..
    return res
      .status(200)
      .send('Success!');

  } catch (e) {
    return res.status(500).send(e.message);
  }
};

Чтобы обновить веб-страницу в режиме реального времени с отметкой времени последней загрузкиЯ пытался внедрить следующую функцию SSE в функцию upload () выше внутри блока try {} непосредственно перед оператором return:

function sendSSE(response) {
  response.writeHead(200, {
    Connection: 'keep-alive',
    'Content-Type': 'text/event-stream',
    'Cache-Control': 'no-cache',
    'Access-Control-Allow-Origin': '*',
  });

  const content = JSON.stringify(Date.now());
  response.write(content);
  response.write('\n\n');

}

Я получил ошибку:

Ошибка [ERR_HTTP_HEADERS_SENT]: Невозможно установить заголовки после их отправки клиенту

1 Ответ

1 голос
/ 01 ноября 2019

Вы не можете отправлять заголовки дважды.

Когда вы звоните res.status(200) и когда вы звоните response.writeHead(200, ...), вы форсируете вывод строки состояния и заголовков. Это не то, что вы можете сделать.

Просто не делайте этого. Избавься от своего res.status(200).send('Success!'); бита.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...