node.js + express 3 + - sockel.io = nicht festlegen Können, Header, nachdem Sie gesendet werden

Ich bin neues zu lernen node.js und es scheint, laufen in einen Fehler nicht beheben können.

Es ist ein sehr einfaches und Anfänger-code, so sollte braucht nicht viel Erklärung, mehr über es funktioniert auf localhost, aber bricht auf Produktions-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'));
});

Und hier ist die gefürchtete Fehler!

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 scheint an var io = require('socket.io').listen(server); da kommentieren dies wie behebt den Fehler.

  • veröffentlichen Sie Ihre Routen-Datei. der Fehler ist nicht aus dem index.jade-Datei
  • Hinzugefügt. Dies ist eine automatisch generierte Datei.
  • hmmm und so keine Fehler bei der Entwicklung aber nur in prod?
  • ja! funktioniert auf localhost
  • nicht sicher, ob dies hat nichts damit zu tun... aber var socket = io.connect('http://localhost'); wäre nicht die Arbeit in der Produktion. vielleicht entfernen Sie diese aus Ihrem index.jade-Datei sehen, wenn Sie weiterhin die Fehlermeldung erhalten. das funktioniert in dev, da der server und der client sind beide auf localhost. aber nicht in prod. client und server sind unterschiedlich.
  • obwohl du Recht und es ist ein blöder Fehler, aber auch die Festsetzung, dass löst nicht das problem.
  • bei der weiteren Untersuchung auskommentieren var io = require('socket.io').listen(server); scheint zu befreien, die Fehler.

InformationsquelleAutor user1574965 | 2012-08-03
Schreibe einen Kommentar