我需要在收到来自/auth/github/callback
的回调后关闭服务器
网址。通常 HTTP API 关闭
服务器目前支持server.close([callback])
API函数,但是对于节点快速服务器,我得到了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();
。
答案 0 :(得分:80)
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
答案 1 :(得分:35)
在express v3中,他们删除了这个功能。
您仍然可以通过分配app.listen()
函数的结果并在其上应用close来实现相同的目标:
var server = app.listen(3000);
server.close()
答案 2 :(得分:1)
我已经在不同的node.js支持渠道上多次回答了“如何终止HTTP服务器”的变体。不幸的是,我不推荐任何现有的库,因为它们以一种或另一种方式lacking。从那以后,我整理出一个程序包(我认为)可以处理正常的express.js HTTP(S)服务器终止的所有情况。
https://github.com/gajus/http-terminator
http-terminator的主要好处是:
答案 3 :(得分:0)
如果您的Express应用程序中发生任何错误,则必须关闭服务器,然后可以像下面那样进行操作-
var app = express();
var server = app.listen(process.env.PORT || 5000)
如果发生任何错误,那么我们的应用程序将收到一个名为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.');
});
});