gpt4 book ai didi

node.js - 在 Express 3 中关闭数据库连接

转载 作者:搜寻专家 更新时间:2023-10-31 22:30:19 26 4
gpt4 key购买 nike

在 Express 3 中,当进程存在时如何处理关闭数据库连接?

除非您明确使用 HTTP 服务器的 .close() 调用,否则不会发出 .on('close', ... 事件。

到目前为止,这是我最接近的,但它使用 process.on 而不是 server.on:

process.on('SIGTERM', function () {
// Close connections.
process.exit(0);
});

最佳答案

基于以下信息:

--

var express = require('express');

var app = express();
var server = app.listen(1337);
var shutting_down = false;

app.use(function (req, resp, next) {
if(!shutting_down)
return next();

resp.setHeader('Connection', "close");
resp.send(503, "Server is in the process of restarting");
// Change the response to something your client is expecting:
// html, text, json, etc.
});

function cleanup () {
shutting_down = true;
server.close( function () {
console.log( "Closed out remaining connections.");
// Close db connections, other chores, etc.
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);

Connection: close header 用于告知任何 keep-alive 连接在下次发送 HTTP 请求时关闭。更多信息在这里:http://www.jmarshall.com/easy/http/#http1.1s4

我不知道是否有其他方法可以关闭keep-alive 连接。除非关闭 keep-alive 连接,否则 Node 进程将挂起。默认空闲超时为 2 分钟。更多信息。关于 node.js keep-alive 超时(包括更改超时):How to set the HTTP Keep-Alive timeout in a nodejs server

关于node.js - 在 Express 3 中关闭数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13423322/

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