node.js + express 3 + socket.io =发送后不能设置头文件 [英] node.js + express 3 + socket.io = Can't set headers after they are sent

查看:125
本文介绍了node.js + express 3 + socket.io =发送后不能设置头文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很习惯学习node.js,似乎遇到一个无法解决的错误。



它的一个非常简单的初学者代码所以不需要太多的解释,更重要的是它在本地主机上工作正常,但在生产服务器上断开。



App.js


  var express = require('express')
,routes = require('./ routes')
, http = require('http')
,path = require('path');

var app = express();

app.configure(function(){
app.set('port',process.env.PORT || 8000);
app.set('views' __dirname +'/ views');
app.set('view engine','jade');
app.use(express.favicon());
app.use(express .logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router );
app.use(express.static(path.join(__ dirname,'public')));
});

app.configure('development',function(){
app.use(express.errorHandler());
});

app.get('/',routes.index);

var server = app.listen(8000);
var io = require('socket.io')。listen(server);

server.listen(app.get('port'),function(){
console.log(Express server listening on port+ app.get('port')) ;
});

这里是可怕的错误!

  http.js:644 
throw new错误('发送后不能设置头文件');
^
错误:发送后不能设置标题。
在ServerResponse.OutgoingMessage.setHeader(http.js:644:11)
在ServerResponse.res.setHeader(/ home1 / artalatc / public_html / cloud1 / node_modules / express / node_modules / connect / lib / patch .js:59:22)
在下一个(/home1/artalatc/public_html/cloud1/node_modules/express/node_modules/connect/lib/proto.js:153:13)
在Function.app。 handle(/home1/artalatc/public_html/cloud1/node_modules/express/node_modules/connect/lib/proto.js:198:3)
在Server.app(/ home1 / artalatc / public_html / cloud1 / node_modules / express $ / $ / $ /
在服务器。< anonymous> (/home1/artalatc/public_html/cloud1/node_modules/socket.io/lib/manager.js:118:10)
在Server.EventEmitter.emit(events.js:115:20)
在HTTPParser.parser.onIncoming(http.js:1793:12)
在HTTPParser.parserOnHeadersComplete [as onHeadersComplete](http.js:111:23)

问题似乎在 var io = require('socket.io')。listen(server); 因为

解决方案

您正在使用哪个版本的Node?



当我使用0.9.x时,我遇到了同样的问题。我将Node降级到0.8.4,问题似乎已经消失了。



我最好的猜测是Node已经改变了,Socket.io不同意。 p>

I'm new to learning node.js and seem to have run into an error that can't get to fix.

Its a very simple and beginners code so shouldn't need much explanation, more over it works fine on localhost, but breaks on production server.

App.js

var express = require('express')
  , routes = require('./routes')
  , http = require('http')
  , path = require('path');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 8000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', routes.index);

var server = app.listen(8000);
var io = require('socket.io').listen(server);

server.listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

And here's the dreaded error!

http.js:644
    throw new Error('Can\'t set headers after they are sent.');
          ^
Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (http.js:644:11)
    at ServerResponse.res.setHeader (/home1/artalatc/public_html/cloud1/node_modules/express/node_modules/connect/lib/patch.js:59:22)
    at next (/home1/artalatc/public_html/cloud1/node_modules/express/node_modules/connect/lib/proto.js:153:13)
    at Function.app.handle (/home1/artalatc/public_html/cloud1/node_modules/express/node_modules/connect/lib/proto.js:198:3)
    at Server.app (/home1/artalatc/public_html/cloud1/node_modules/express/node_modules/connect/lib/connect.js:66:31)
    at Manager.handleRequest (/home1/artalatc/public_html/cloud1/node_modules/socket.io/lib/manager.js:564:28)
    at Server.<anonymous> (/home1/artalatc/public_html/cloud1/node_modules/socket.io/lib/manager.js:118:10)
    at Server.EventEmitter.emit (events.js:115:20)
    at HTTPParser.parser.onIncoming (http.js:1793:12)
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:111:23)

Problem seems to be at var io = require('socket.io').listen(server); because commenting this like removes the error.

解决方案

What version of Node are you using?

I had the same problem when I was using 0.9.x. I downgraded Node to 0.8.4 and the problem seems to have gone away.

My best guess is something in Node has changed that Socket.io doesnt agree with.

这篇关于node.js + express 3 + socket.io =发送后不能设置头文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆