我正在尝试在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复制了示例。
我没有太多的经验可以了解我在做什么错,任何帮助将不胜感激。
答案 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)
中间件试图将标头设置为响应时,将发生错误。