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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Welche version von Knoten verwenden Sie?
Ich hatte das gleiche problem, wenn ich mit 0,9.x. Ich herabgestuft Knoten 0.8.4 und das problem scheint verschwunden.
Meine beste Vermutung ist, etwas in der Node geändert hat, dass Socket.io nicht Zustimmen.
upgrade
express - 3.1.0 und Steckdose.io - 0.9.13
ist es ok auf nodejs0.10
Welche version von express verwenden Sie? Check-out https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x oder versuchen Sie dies:
var io = require('socket.io').listen(server);
Überprüfen Sie diesen thread als gut: github.com/visionmedia/express/issues/1265ich hatte das gleiche Problem mate
wenn Sie express 3.0 sollten Sie versuchen, diese:
http://codehenge.net/blog/2012/08/using-socket-io-with-express-3-x/
überprüfen Sie auch die version von Knoten:
versuchen Sie es mit v0.8.9 oder jede andere stabile version
Es hat mir geholfen! Und wird Ihnen helfen,
Für jeden, stoßen in dieser Ausgabe, die Sie verwenden sollten:
Als express nicht mehr gibt eine HTTP-Instanz, die Buchse.io benötigt. Finden Sie in der aktualisierten README-Datei.md-Datei auf https://github.com/learnboost/socket.io für die express 2-und 3 Beispiele.
Dieser Ansatz funktioniert in der aktuellen stabilen Version 0.8.14:
Ich hatte das exakt gleiche Problem. Inkompatible Versionen von express und socket.io war Schuld. Aktualisiert Sie, um auszudrücken, 3.2.4 und Steckdose.io-0.9.14 und funktioniert wie ein Charme.
Oder Sie können ein downgrade Ihrer Steckdose.io zu einer früheren version, aber du musst das herausfinden.
diese Fehler kommen, da express intern verwenden-cache bedeutet, für jeden zweiten Antrag Daten aus dem cache, so dass es die Antwort zurück mit 304 status-code so verwenden
sagt er dem express jede Anfrage frische Mittel, mit stautscode 200
Ändern-Buchse.io-Abhängigkeit zu 0.9.15 im Paket.json, laufen
npm install
und es sollte dein problem lösen.Ausführen einer npm-Liste-Buchse.io
Stellen Sie sicher, dass es nicht zeigen, als ungültig unten
─ [email protected] ungültige
npm ERR! ungültig: [email protected] c:\Users....
Wenn Sie diese Fehlermeldung erhalten, npm install socket.io.
Auch stellen Sie sicher, dass das gleiche mit anderen Paketen.