createServer: невозможно установить заголовки после их отправки клиенту - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь настроить тип MIME на моем http-сервере и установить Content-Type на text/html, но я получаю эту ошибку:

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

Вот как выглядит мой код:

const handler = require('serve-handler');
const http = require('http');

const server = http.createServer((request, response) => {
  response.statusCode = 200;
  response.setHeader('Content-Type', 'text/html');
  response.end();

  handler(request, response);
})

server.listen(3000, () => {
  console.log('Running at http://localhost:3000');
});

Я в значительной степени скопировал примериз библиотеки (подачи) README .

У меня нет большого опыта с этим, чтобы понять, что я делаю неправильно, любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

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

Попробуйте переместить эту строку handler(request, response) вверх, например, так:

const server = http.createServer((request, response) => {
  handler(request, response); //move here

  response.statusCode = 200;
  response.setHeader('Content-Type', 'text/html');
  response.end();
})

Из-за оператора response.end () :

Этот метод сообщает серверу, что все заголовки и тело ответа отправлены;этот сервер должен считать это сообщение завершенным.

Поэтому, когда промежуточное ПО handler(request, response) пытается установить заголовки для ответа, возникает ошибка.

0 голосов
/ 03 октября 2018

Вы заканчиваете ответ своим response.end().Это означает, что голова и тело были отправлены клиенту.Следовательно, handler, когда он запускается, когда пытается установить свойства ответа, он не может этого сделать, поскольку ответ уже был отправлен.

Я полагаю, вам не нужно response.end(),Не ясно, служит ли это какой-либо цели.

...