2013-01-25 155 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时,看起来好像服务器没有关闭。如果您尝试使用其他浏览器,则会看到服务器套接字未运行。 –