2012-03-31 15 views
19

मैं मूल रूप से बंदरगाहों को बदलने में सक्षम हूं जो मेरा एक्सप्रेस ऐप चल रहा है।प्रोग्रामेटिक रूप से एक्सप्रेस सर्वर को रोकें और पुनरारंभ करें (बंदरगाहों को बदलने के लिए)

मैं कोशिश की है:

server.on('close', function() { 
    server.listen(3000); 
}); 

server.listen(8080); 
server.close(); 

यह एक गुप्त Node.js त्रुटि देता है। मैं नोड v0.4.11 चला रहा हूं, मैं अब यह देखने के लिए अपग्रेड कर रहा हूं कि यह ठीक करता है या नहीं।

Assertion failed: (!io->watcher_.active), function Set, file ../src/node_io_watcher.cc, line 160. 

धन्यवाद, मैट

+0

'.listen' असीमित है, ताकि वह इसे खोलने से पहले बंद करने का प्रयास करेगा। 'Server.listen (8080, फ़ंक्शन() {server.close();}) आज़माएं; ', शायद यह काम करेगा। – loganfsmyth

+1

आपको क्या त्रुटि मिल रही है? – Brad

+0

दावा विफल हुआ: (! Io-> watcher_.active), फ़ंक्शन सेट, फ़ाइल ../src/node_io_watcher.cc, पंक्ति 160. – Matt

उत्तर

26

मुद्दा यह है कि .listen अतुल्यकालिक है:

संपादित यहाँ त्रुटि है। पर कॉल करने के तुरंत बाद .close पर कॉल करके, आप इसे खोले जाने से पहले इसे बंद कर रहे हैं।

इसके बजाए इसे आजमाएं।

server.listen(8080, function() { 
    server.close(); 
}); 
+2

# क्लोज़ भी असीमित है। इसमें एक कॉलबैक है, जो सर्वर को किसी भी बचे हुए कनेक्शन से निपटने के बाद ही ट्रिगर करता है – rocketspacer

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

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