gpt4 book ai didi

node.js - Express.js 应用程序未使用 server.close() 完全关闭

转载 作者:IT老高 更新时间:2023-10-28 23:26:09 28 4
gpt4 key购买 nike

我正在尝试在应用关闭时正确关闭 MongoDB 连接。代码如下:

var express = require('express')
, http = require('http')
, mongoose = require('mongoose')
, path = require('path');

var app = express();

app.set('port', process.env.PORT || 3000);

mongoose.connect('mongodb://localhost/test');

// some post and get handlers etc. (removed for shorter output)

var server = app.listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});

function cleanup () {
server.close(function () {
console.log("Closed out remaining connections.");
mongoose.connection.close();
process.exit();
});

setTimeout( function () {
console.error("Could not close connections in time, forcing shut down");
process.exit(1);
}, 30*1000);
}

process.on('SIGINT', cleanup);
process.on('SIGTERM', cleanup);

当应用程序第一次启动时,一切都很好并且工作正常。当我在它启动后立即点击 Ctrl-c 时,它会干净地关闭并显示 Closed out remaining connections. 消息。但是,一旦应用程序与数据库交互甚至提供静态页面,然后我尝试将其关闭,它就会退出并出现以下错误:

net.js:1225
throw new Error('Not running');
^
Error: Not running
at Server.close (net.js:1225:11)
at process.cleanup (<...>/app.js:77:12)
at process.EventEmitter.emit (events.js:92:17)
at Signal.wrap.onsignal (node.js:756:46)
22 Aug 15:15:28 - [nodemon] exiting

任何想法是什么导致了这个错误以及我该如何解决它?

最佳答案

调用 server.close 时,会检查两个属性。

   handle<tcp handle>
connections

负责这个错误的server.close的代码片段;

  if (!this._handle) {
// Throw error. Follows net_legacy behaviour.
throw new Error('Not running');
}

只有当handle===null 和connections ===0 时,传递给close 的回调才会被调用。

案例:服务器启动并发送信号但没有服务。

在调用关闭之前;

  handle === TCP handle.
connection===0;

关闭后 句柄===空; 连接===0;

回调被调用。

案例:服务器启动并在请求服务器之后发送信号。

在调用关闭之前;

  handle === TCP.handle;
connection===1;

关闭后 处理 === 空; 连接===1;

没有触发回调。

第二次按 ctrl-c

在调用关闭之前;

  handle === null;
connection===1;

由于 handle===null ,检查会抛出您看到的错误。

关于node.js - Express.js 应用程序未使用 server.close() 完全关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381899/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com