2013-01-25 10 views
39

मुझे /auth/github/callback url से कॉलबैक प्राप्त करने के बाद सर्वर को बंद करने की आवश्यकता है। हमेशा की तरह HTTP API समापन सर्वर के साथ वर्तमान में server.close([callback]) एपीआई समारोह के साथ समर्थन कर रहा है, लेकिन नोड एक्सप्रेस सर्वर के साथ मैं TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close' त्रुटि मिल रही है। और मुझे नहीं पता कि इस समस्या को हल करने के लिए जानकारी कैसे प्राप्त करें।
मुझे एक्सप्रेस सर्वर को कैसे बंद करना चाहिए?नोड-एक्सप्रेस सर्वर को सही तरीके से कैसे बंद करें?

NodeJS विन्यास नोट:

$ node --version 
v0.8.17 
$ npm --version 
1.2.0 
$ npm view express version 
3.0.6 

वास्तविक आवेदन कोड:

var app = express(); 

// configure Express 
app.configure(function() { 
    // … configuration 
}); 

app.get(
    '/auth/github/callback', 
    passport.authenticate('github', { failureRedirect: '/login' }), 
    function(req, res) { 
     res.redirect('/'); 

     setTimeout(function() { 
      app.close(); 
      // TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close' 
     }, 3000) 
    } 
); 

app.listen('http://localhost:5000/'); 

इसके अलावा, मैं ‘nodejs express close…’ पाया है लेकिन मुझे लगता है मैं अगर मैं कोड के साथ उपयोग कर सकते हैं यकीन नहीं करते हैं: var app = express();

उत्तर

49

app.listen()http.Server देता है। आपको उस उदाहरण पर close() का आह्वान करना चाहिए और app उदाहरण पर नहीं।

पूर्व।

app.get(
    '/auth/github/callback', 
    passport.authenticate('github', { failureRedirect: '/login' }), 
    function(req, res) { 
     res.redirect('/'); 

     setTimeout(function() { 
      server.close(); 
      // ^^^^^^^^^^^ 
     }, 3000) 
    } 
); 

var server = app.listen('http://localhost:5000/'); 

आप निरीक्षण कर सकते हैं स्रोतों: /node_modules/express/lib/application.js

+3

अजीब है, यह अगर मैं कुछ मार्ग का उपयोग बंद करने नहीं है। –

+1

@ उदय, मैंने यह भी अनुभव किया। मुझे पता चला कि मेरे ब्राउज़र में HTTP1.1 लगातार कनेक्शन खुला था, इसलिए जब मैंने F5 दबाया तो ऐसा प्रतीत होता था कि सर्वर बंद नहीं हुआ था। यदि आप एक अलग ब्राउज़र का प्रयास करते हैं तो आप देखेंगे कि सर्वर सॉकेट नहीं चल रहा है। –

21

एक्सप्रेस v3 में वे इस समारोह निकाला गया।

तुम अब भी app.listen() फ़ंक्शन के परिणाम बताए द्वारा एक ही प्राप्त करने और उस पर करीब आवेदन कर सकते हैं:

var server = app.listen(3000); 
server.close() 

https://github.com/visionmedia/express/issues/1366

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