2012-08-03 13 views
7

भेजे जाने के बाद हेडर सेट नहीं कर सकते हैं मैं node.js सीखने के लिए नया हूं और ऐसा लगता है कि ठीक करने के लिए कोई त्रुटि नहीं हो सकती है।node.js + express 3 + socket.io =

यह एक बहुत ही सरल और शुरुआती कोड है, इसलिए उसे अधिक स्पष्टीकरण की आवश्यकता नहीं है, इसके अलावा यह स्थानीयहोस्ट पर ठीक काम करता है, लेकिन उत्पादन सर्वर पर टूट जाता है।

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 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) 

समस्या है क्योंकि इस तरह टिप्पणी त्रुटि को दूर करता var io = require('socket.io').listen(server); पर हो रहा है।

+0

अपनी मार्ग फ़ाइल पोस्ट करें। त्रुटि index.jade फ़ाइल से नहीं है – c0deNinja

+0

जोड़ा गया। यह एक ऑटो जेनरेट की गई फाइल है। – user1574965

+0

हम्म और इसलिए विकास में कोई त्रुटि नहीं है, लेकिन केवल प्रोड में? – c0deNinja

उत्तर

2

एक्सप्रेस का कौन सा संस्करण आप उपयोग कर रहे हैं? https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x की जाँच करें या इस प्रयास करें:

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

पहले से ही कोशिश की गई है, समस्या 'var io = requ (' socket.io ') के साथ है। सुनो (सर्वर);' इस धागे को भी जांचें: https://github.com/visionmedia/express/issues/1265 – user1574965

7

नोड किस संस्करण का उपयोग कर रहे हैं?

जब मैं 0.9.x का उपयोग कर रहा था तो मुझे वही समस्या थी। मैंने नोड को 0.8.4 तक घटा दिया और समस्या दूर हो गई प्रतीत होती है।

मेरा सबसे अच्छा अनुमान है कि नोड में कुछ बदल गया है जो सॉकेट.io से सहमत नहीं है।

+0

मैंने किया वही। समस्या फिक्स्ड। – user1574965

+2

क्या इसे नोड के नवीनतम संस्करणों के साथ काम करने का कोई तरीका है? – Magicode

1

इस मुद्दे आप का उपयोग करना चाहिए करने के लिए जोड़ने से किसी के लिए:

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

के रूप में नहीं रह गया है व्यक्त एक HTTP आवृत्ति socket.io की आवश्यकता है देता है। एक्सप्रेस 2 और 3 उदाहरणों के लिए https://github.com/learnboost/socket.io पर अद्यतन README.md फ़ाइल देखें।

2

मैं एक ही मुद्दा दोस्त

रहा था अगर आप एक्सप्रेस 3.0 का उपयोग कर रहे आप इस प्रयास करना चाहिए: http://codehenge.net/blog/2012/08/using-socket-io-with-express-3-x/

भी नोड के अपने संस्करण की जाँच करें:

node --version 

V0 उपयोग करके देखें। 8.9 या कोई अन्य स्थिर संस्करण

इससे मेरी मदद की! और तुम

1

यह दृष्टिकोण वर्तमान स्थिर रिलीज 0.8.14 में काम करता है में मदद मिलेगी:

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

उन्नयन एक्सप्रेस - 3.1.0 और socket.io - 0.9.13

यह nodejs0 पर ठीक है .10

+0

यह मेरे लिए समाधान था। धन्यवाद! नोड v0.10.0, एक्सप्रेस 3.1.0, और सॉकेट.io 0.9.13। –

0

मेरे पास एक ही समस्या थी। एक्सप्रेस और सॉकेट.ओ के असंगत संस्करणों को दोष देना था। उन्हें 3.2.4 और socket.io 0.9.14 व्यक्त करने के लिए अपग्रेड किया गया और एक आकर्षण की तरह काम करता है।

या आप अपने सॉकेट.io को पिछले संस्करण में डाउनग्रेड कर सकते हैं, लेकिन आपको इसे एक को समझना होगा।

0

क्योंकि आंतरिक रूप से व्यक्त करते हैं का उपयोग हर दूसरे अनुरोध डेटा के लिए कैश से मिल तो यह प्रतिक्रिया 304 स्थिति कोड के साथ वापस तो

app.disable('etag'); 

यह बताता एक्सप्रेस प्रत्येक stautscode 200

साथ नए सिरे से साधन का अनुरोध का उपयोग कैश का मतलब आ इस त्रुटि
0

पैकेज.जेसन में सॉकेट.io निर्भरता 0.9.15 में बदलें, npm install चलाएं और इसे आपकी समस्या को ठीक करना चाहिए।

0

socket.io

[email protected] अमान्य

NPM ERR एक NPM सूची भागो यकीन है कि यह नीचे के रूप में अवैध प्रदर्शित नहीं करता है,! अमान्य: [email protected] सी: \ उपयोगकर्ता ....

यदि आपको यह त्रुटि मिलती है, तो npm socket.io इंस्टॉल करें। अन्य पैकेजों के साथ भी यह सुनिश्चित करें।

संबंधित मुद्दे