仅在 Cloud9 上出现错误“发送后无法设置标头”

Posted

技术标签:

【中文标题】仅在 Cloud9 上出现错误“发送后无法设置标头”【英文标题】:Error 'Can't set headers after they are sent' only on Cloud9 【发布时间】:2013-09-17 21:02:36 【问题描述】:

在 Cloud9 ide 上同时使用 Express 和 socket.io 时出现以下错误:

http.js:707 throw new Error('Can\'t set headers after they are sent.'); ^ 错误:发送后无法设置标题。 在 ServerResponse.OutgoingMessage.setHeader (http.js:707:11) 在 ServerResponse.res.setHeader (/var/lib/stickshift/523075494382ec51c3000001/app-root/data/610464/node_modules/express/node_modules/connect/lib/patch.js:59:22) 在下一个(/var/lib/stickshift/523075494382ec51c3000001/app-root/data/610464/node_modules/express/node_modules/connect/lib/proto.js:153:13) 在 Function.app.handle (/var/lib/stickshift/523075494382ec51c3000001/app-root/data/610464/node_modules/express/node_modules/connect/lib/proto.js:198:3) 在 Server.app (/var/lib/stickshift/523075494382ec51c3000001/app-root/data/610464/node_modules/express/node_modules/connect/lib/connect.js:65:37) 在 Manager.handleRequest (/var/lib/stickshift/523075494382ec51c3000001/app-root/data/610464/node_modules/socket.io/lib/manager.js:564:28) 在服务器。 (/var/lib/stickshift/523075494382ec51c3000001/app-root/data/610464/node_modules/socket.io/lib/manager.js:118:10) 在 Server.EventEmitter.emit (events.js:117:20) 在 HTTPParser.parser.onIncoming (http.js:2056:12) 在 HTTPParser.parserOnHeadersComplete [如 onHeadersComplete] (http.js:120:23)

下面是我的 server.js 代码:

var express = require('express');
var app = express()
  , http = require('http')
  , server = http.createServer(app)
  , io = require('socket.io').listen(server);


server.listen(process.env.PORT, process.env.IP);

app.get('/', function(req,res) 
    res.writeHead(200, 'Content-Type': 'text/plain');
    res.write('Hello World\n');
)

我正在使用节点:“0.10.x”,socket.io:“0.9.14”和表达:“3.x”。此错误仅在 Cloud9 ide 上出现。在 localhost 上运行良好。 请帮忙。

【问题讨论】:

对我来说很好用:c9.io/fardjad/node_version_test 当在响应发送后尝试写入或修改响应头时会发生这种情况。 @fardjad,我在 server.js 和 package.json 文件中有与您相同的代码,但我仍然收到此错误。您使用的是什么节点版本?当我尝试在浏览器中访问应用程序时,我得到输出“Hello World”,但之后发生错误,您可以在 cloud9 ide 的输出控制台中看到。 process.version 在我的 c9 工作区中是 v0.10.15 【参考方案1】:

我遇到了同样的问题。虽然这不是一个好的解决方案,但将 Express 恢复到 3.1.0 版本为我解决了这个问题。从高层次上看,Express 和 Socket.io 的最新版本不能很好地协同工作。

还原后我使用的版本是:

节点:0.10.x

Socket.io:0.9.16

快递:3.1.0

【讨论】:

以上是关于仅在 Cloud9 上出现错误“发送后无法设置标头”的主要内容,如果未能解决你的问题,请参考以下文章

带有 Chai 错误的 Express 单元测试 = 发送后无法设置标头

解析服务器(快速)错误:发送后无法设置标头

错误:发送后无法设置标头。

UnhandledPromiseRejectionWarning:错误:发送后无法设置标头[重复]

不断收到错误:发送后无法设置标头

发送后无法设置标头 - 通过 NodeJs 发布新用户