我 需要 关闭 服务 器 后 , 从 /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();
.
6条答案
按热度按时间ymdaylpp1#
app.listen()
返回http.Server
。应在该示例上调用close()
,而不是在app
示例上调用。前
您可以检查来源:
/node_modules/express/lib/application.js
falq053o2#
在express v3中,他们删除了此功能。
您仍然可以通过赋值
app.listen()
函数的结果并对其应用close来实现相同的效果:https://github.com/visionmedia/express/issues/1366
2w3rbyxf3#
如果您的Express应用程序中发生任何错误,则必须关闭服务器,您可以按如下所示进行操作-
如果出现任何错误,我们的应用程序将获得一个名为
SIGTERM
的信号。t1qtbnec4#
我在不同的node.js支持渠道上多次回答了“如何终止HTTP服务器”的问题。不幸的是,我不能推荐任何现有的库,因为它们在某种程度上是缺乏的。我已经整理了一个包,(我相信)可以处理所有预期的优雅express.js HTTP(S)服务器终止的情况。
https://github.com/gajus/http-terminator
http-terminator的主要优势在于:
iswrvxsc5#
调用
server.close
即可完成该任务同样,侦听系统(用户)信号并在它们上正常关闭也是很好的,因为您应该侦听
SIGTERM
和SIGINT
txu3uszq6#
老问题了,但是现在Nodev18.2.0引入了
server.closeAllConnections()
。应该注意的是,当浏览器发送请求Connection: keep-alive
时,server.close
从不运行它的回调,因为server.close
只是阻止服务器接受新连接,它不会关闭旧连接。在Node v18.2.0之前,我通过等待5秒让服务器关闭来解决这个问题,之后它将强制退出。
这段代码涵盖了这两种情况