createServer:将标头发送到客户端后无法设置标头

时间:2018-10-03 00:13:14

标签: http httpserver

我正在尝试在http服务器上配置MIME类型并将Content-Type设置为text/html,但是我收到此错误:

  

(节点:87702)UnhandledPromiseRejection警告:错误[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');
});

我已经从library's (serve) README复制了示例。

我没有太多的经验可以了解我在做什么错,任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您将以response.end()结束响应。这意味着头部和身体已发送给客户。因此,handler在运行时尝试设置响应属性时将无法响应,因为响应已经发送。

我猜您不需要response.end()。尚不清楚它有什么作用。

答案 1 :(得分:1)

  

(节点: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)中间件试图将标头设置为响应时,将发生错误。

相关问题