Node.js nodeJS:抛出新错误(';发送头后不能设置头);

Node.js nodeJS:抛出新错误(';发送头后不能设置头);,node.js,express,Node.js,Express,这是一个常见的问题,但没有得到解决。所以我再次把它放在这里 这里是app.js /** * Module dependencies. */ var express = require('express'); var routes = require('./routes'); var user = require('./routes/user'); var http = require('http'); var path = require('path'); var app = expre

这是一个常见的问题,但没有得到解决。所以我再次把它放在这里

这里是app.js

/**
 * Module dependencies.
 */

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

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

var server = http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});
require('./routes/sockets.js').initialize(server);
这是routes文件夹中的sockets.js

var io = require('socket.io');
exports.initialize = function(server) {console.log('init called');
    io = io.listen(server);console.log('io');
    io.sockets.on("connection", function(socket){console.log("connected");
        socket.send(JSON.stringify({type:'serverMessage',message: 'Welcome to the most interesting chat room on earth!'}));
        socket.on('message', function(message){
            message= JSON.parse(message);
            if(message.type == "userMessage")
            {
                socket.broadcast.send(JSON.stringify(message));
                message.type = "myMessage";
                socket.send(JSON.stringify(message));
            }
        });
    });
};
Inside sockets.js
console.log('init called')
console.log('io')打印效果良好。当我使用
npm start
运行此应用程序时,出现以下错误:

npm WARN package.json application-name@0.0.1 No repository field.
npm WARN package.json application-name@0.0.1 No readme data.

> application-name@0.0.1 start D:\Applications\New folder\node\chat
> node app.js

init called
   info  - socket.io started
io
Express server listening on port 3000
GET / 200 312ms - 511

http.js:707
    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:707:11)
    at ServerResponse.res.setHeader (D:\Applications\New folder\node\chat\node_m
odules\express\node_modules\connect\lib\patch.js:59:22)
    at next (D:\Applications\New folder\node\chat\node_modules\express\node_modu
les\connect\lib\proto.js:153:13)
    at Function.app.handle (D:\Applications\New folder\node\chat\node_modules\ex
press\node_modules\connect\lib\proto.js:198:3)
    at Server.app (D:\Applications\New folder\node\chat\node_modules\express\nod
e_modules\connect\lib\connect.js:66:31)
    at Manager.handleRequest (D:\Applications\New folder\node\chat\node_modules\
socket.io\lib\manager.js:564:28)
    at Server.<anonymous> (D:\Applications\New folder\node\chat\node_modules\soc
ket.io\lib\manager.js:118:10)
    at Server.EventEmitter.emit (events.js:117:20)
    at HTTPParser.parser.onIncoming (http.js:2051:12)
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:122:23
)
npm WARN package.json应用程序-name@0.0.1没有存储库字段。
npm WARN package.json应用程序-name@0.0.1没有自述文件数据。
>应用-name@0.0.1启动D:\Applications\New folder\node\chat
>node app.js
初始化调用
信息-socket.io已启动
木卫一
正在端口3000上侦听的Express server
GET/200 312ms-511
http.js:707
抛出新错误('发送头后无法设置头');
^
错误:发送邮件后无法设置邮件头。
位于ServerResponse.OutgoingMessage.setHeader(http.js:707:11)
在ServerResponse.res.setHeader(D:\Applications\New folder\node\chat\node\m
odules\express\node\u modules\connect\lib\patch.js:59:22)
下一步(D:\Applications\New folder\node\chat\node\u modules\express\node\u modu
les\connect\lib\proto.js:153:13)
位于Function.app.handle(D:\Applications\New folder\node\chat\node\u modules\ex
按\node\u modules\connect\lib\proto.js:198:3)
在Server.app(D:\Applications\New folder\node\chat\node\u modules\express\nod
e_modules\connect\lib\connect.js:66:31)
在Manager.handleRequest(D:\Applications\New folder\node\chat\node\u模块\
socket.io\lib\manager.js:564:28)
在服务器上。(D:\Applications\New folder\node\chat\node\U modules\soc
ket.io\lib\manager.js:118:10)
在Server.EventEmitter.emit上(events.js:117:20)
在HTTPParser.parser.onIncoming(http.js:2051:12)
在HTTPParser.parserOnHeadersComplete[作为onHeadersComplete](http.js:122:23)
)

当我在浏览器中访问
localhost:3000
时,一切都发生了。我使用的是节点版本
v0.10.10
,express
3.4.4

找到解决方案了!!这是因为某些版本不匹配。这是我使用的依赖项

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "3.4.4",
    "socket.io": "0.9",
    "jade": "*"
  }
}

尝试var server=http.createServer(app);需要('./routes.socket.js').initialize(服务器);侦听(app.port,function(){…});也许在你的路线上你做了res.end(…);或res.render(…);在发送res.send(…)之前;您是否尝试注释行require('./routes/socket.js').init(服务器)以查看错误是否来自该行?不,我没有在代码中的任何位置使用
res
。如果我注释掉require('./routes/sockets.js')。初始化(服务器),我在上面发布的路由代码它没有显示任何错误。这意味着
routes.js内部存在一些问题,上面的所有操作都不正常