2013-04-09 9 views
6

मैं कोड के इस टुकड़े है:Node.js में समाप्त होने वाले नहीं अनुरोध (काम करता था)

var app = require('http').createServer(function(req, res){ 
    console.log(req); 
    req.addListener('end', function() { 
     fileServer.serve(req, res); 

    }); 
}); 

var statics = require('node-static'); 
var fileServer = new statics.Server('./'); 

app.listen(1344, '127.0.0.1'); 

app.on('error', function(err){ 
    console.log(err); 
}) 

यह सिर्फ ठीक काम कर रहा था, जब तक मैं परिवर्तन की एक जोड़ी बनाई, नोड एक त्रुटि देता है, और जब मैं वापस गया, वह त्रुटि अब और नहीं थी, लेकिन काम की बजाय end घटना से पहले काम नहीं कर रहा था। तो, req.addListener('end', function(){}); के अंदर कुछ भी नहीं कहा जाता है।

और यहां तक ​​कि अगर मैं एक और नोड.जेएस चलाता हूं जो एक ही घटना का उपयोग करता है, तो उसे निकाल दिया नहीं जा रहा है। ऐसा लगता है कि अनुरोध की अंतिम घटना टूट गई है। लेकिन यह कैसे संभव हो सकता है?

ऐसा पहली बार नहीं होता है। पिछली बार जब मैं नोड को फिर से इंस्टॉल कर रहा था (विभिन्न चीजों की कोशिश करने के बाद)। मैं समाधान ढूंढना पसंद करूंगा, इसलिए मैं समस्या को समझ सकता हूं!

नोट: मूल कोड में सॉकेट.ओ और अन्य प्रकार के कनेक्शन शामिल हैं, लेकिन मैंने कोड के टुकड़े को चिपकाया है, ऐप पर अटक गया है।

यह जानना भी उपयोगी हो सकता है कि समस्या को कैसे डिबग करना है!

+0

'नोड v0.8.x' के साथ प्रयास करें या http://nodejs.org – InspiredJW

+0

मैं कि क्या' fileServer.serve' काम करता है से बात नहीं कर सकते में Stream2 Documenation पढ़ा है, लेकिन अगर आप 'नोड-स्टेटिक' से संबंधित सबकुछ निकालते हैं, आपका कोड इस तरह काम करता है और 'अंत' घटना निश्चित रूप से बुलाया जाता है। मुझे याद आती है जब हमने 'नोड-स्टेटिक' का उपयोग करने की कोशिश की और कनेक्ट से स्थिर मिडलवेयर का उपयोग करना बेहतर हो सकता है यदि यह वास्तव में आपकी समस्या है। http://www.senchalabs.org/connect/static.html –

+0

@InspiredJW मैं v0.10.3 पर हूं। क्या आप कह रहे हैं कि मुझे डाउनग्रेड करना चाहिए? – limoragni

उत्तर

13

@InspiredJW को इसे इंगित करने के लिए क्रेडिट प्राप्त करना चाहिए, क्योंकि मैं इसके बारे में भूल गया था, लेकिन निस्संदेह आपकी समस्या पठनीय धाराओं में बदलावों के कारण है। end ईवेंट को कॉल करने के लिए आपको या तो data ईवेंट में श्रोता संलग्न करना होगा, या आपको stream.resume() पर कॉल करना होगा।

require('http').createServer(function(req, res){ 
    req.addListener('end', function() { 
     // won't ever get called in node v0.10.3 
    }); 
}); 

require('http').createServer(function(req, res){ 
    req.addListener('end', function() { 
     // will get called in node v0.10.3 because we called req.resume() 
    }); 
    req.resume(); 
}); 

require('http').createServer(function(req, res){ 
    req.on('data', function (chunk) { }); 

    req.addListener('end', function() { 
     // also will get called because we attached a data event listener 
    }); 
}); 

http://nodejs.org/api/stream.html#stream_compatibility

+0

ग्रेट। अब काम कर रहा है मैं समझ नहीं पा रहा हूं, यह पहली जगह कैसे काम करता है! मैं node.js के लिए नया हूँ मुझे काम करने के लिए बहुत कुछ पढ़ना होगा। क्या आप नोड के बारे में अच्छी किताब जानते हैं? मुझे पता है कि अप्रेस एक पर काम कर रहा है, लेकिन मैं तुरंत एक करना पसंद करूंगा। धन्यवाद! – limoragni

+0

मुझे नहीं, क्षमा करें। मैंने इसे इस्तेमाल करके नोड सीखा। यह शायद पहले काम करता था क्योंकि आपके पास या तो 'डेटा' इवेंट श्रोता संलग्न था, या आप नोड के पुराने संस्करण का उपयोग कर रहे थे। –

+0

@limoragni आप शायद नोड को v0.10.3 या उच्चतर में अपग्रेड कर चुके हैं और यही कारण है कि यह काम करना बंद कर देता है। – Chev

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