问问题
94617 次
4 回答
133
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
于 2013-01-25T05:59:06.850 回答
57
于 2014-02-12T20:52:53.880 回答
11
如果您的快速应用程序中发生任何错误,那么您必须关闭服务器,您可以执行以下操作 -
var app = express();
var server = app.listen(process.env.PORT || 5000)
如果发生任何错误,那么我们的应用程序将收到一个名为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((err) => {
console.log('Http server closed.');
process.exit(err ? 1 : 0);
});
});
于 2019-07-01T12:05:06.640 回答
4
我在不同的node.js支持渠道上多次回答了“如何终止 HTTP 服务器”的变体。不幸的是,我不能推荐任何现有的库,因为它们以一种或另一种方式缺乏。从那以后,我已经组合了一个包,(我相信)它可以处理所有预期的优雅 express.js HTTP(S) 服务器终止的情况。
https://github.com/gajus/http-terminator
http-terminator的主要好处是:
- 它没有猴子补丁 Node.js API
- 它会立即销毁所有没有附加 HTTP 请求的套接字
- 它允许对正在进行的 HTTP 请求的套接字进行优雅的超时
- 它正确处理 HTTPS 连接
- 它通过设置连接来通知连接使用保持活动服务器正在关闭:关闭标头
- 它不会终止 Node.js 进程
于 2020-01-20T03:15:51.467 回答