如何正确关闭node-express服务器?

Vla*_*kov 64 javascript api webserver node.js express

我需要在从/auth/github/callback url 收到回调后关闭服务器.通常的HTTP API关闭服务器目前支持server.close([callback]) API函数,但是对于node-express服务器我收到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
Run Code Online (Sandbox Code Playgroud)

实际应用代码:

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/');
Run Code Online (Sandbox Code Playgroud)

另外,我发现'nodejs表示关闭......'但我不确定我是否可以将它与我拥有的代码一起使用:var app = express();.

Vla*_*sov 85

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/');
Run Code Online (Sandbox Code Playgroud)

您可以检查来源: /node_modules/express/lib/application.js

  • 奇怪的是,如果我访问某条路线,它就不会关闭. (4认同)

Mic*_*ael 39

在express v3中,他们删除了这个功能.

您仍然可以通过分配app.listen()函数的结果并在其上应用close 来实现相同的目的:

var server = app.listen(3000);
server.close()
Run Code Online (Sandbox Code Playgroud)

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


Neh*_*rma 7

如果您的 express 应用程序中发生任何错误,那么您必须关闭服务器,您可以像下面那样执行此操作-

var app = express();
var server = app.listen(process.env.PORT || 5000)
Run Code Online (Sandbox Code Playgroud)

如果发生任何错误,我们的应用程序将收到一个名为SIGTERM. 您可以在此处阅读更多 SIGTERM - https://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html

process.on('SIGTERM', () => {
  console.info('SIGTERM signal received.');
  console.log('Closing http server.');
  server.close(() => {
    console.log('Http server closed.');
  });
});
Run Code Online (Sandbox Code Playgroud)