2013-01-25 217 views
39

我需要關閉服務器後,從/auth/github/callback URL回調。與通常HTTP API收盤 服務器目前正與server.close([callback]) API功能支持,但隨着節點Express服務器我得到TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'close' 錯誤。而且我不知道如何找到信息來解決這個問題。
如何關閉快遞服務器?如何正確關閉node-express服務器?

配置的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實例上調用。

Ex。

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

@Uday,我也經歷過這個。我發現我的瀏覽器打開了一個HTTP1.1持久連接,所以當我按下F5時,看起來好像服務器沒有關閉。如果您嘗試使用其他瀏覽器,則會看到服務器套接字未運行。 –