在Node.js中,如何结束MySQL连接池?

4

我正在使用Nodejs上的MySQL。我正在使用mysql池创建连接:

Var mysqk = require ('mysql');
Var pool = mysql.createPool ({my configs});

我的问题是: 在应用程序的哪个位置会使用文档中报告的pool.end()
例如:在我的www文件中,我创建了一段代码来释放其他内容,如我所指出的那样。我应该在那里使用pool.end()吗?
var app     = require('../app');
var debug   = require('debug')('cancela:server');
var http    = require('http');
var port = normalizePort(process.env.PORT || '4000');
app.set('port', port);
var server = http.createServer(app);

// my app codes...
..
.
.

process.once('SIGTERM', end);
process.once('SIGINT', end);

function end() {

    server.close(function(err){

    if(err) throw err();

        // Should I end the Pool connection here?  <<<<<<===================================
        // pool.end(function (err) {
        //   // all connections in the pool have ended 
        // });

        console.log('Server endded!');        

        /* exit gracefully */
        process.exit();
    });
}
1个回答

4
有时候,由于某种原因,你希望手动释放连接池,这样你可以在最后重新创建池之前使用pool.end()。大多数情况下,当服务器即将关闭时,你想要释放它以便进行操作。请注意函数调用process.exit()的位置。它必须在连接释放之后被调用,否则池不会完成释放。
function end() {
    server.close(function (err) {
        if (err) throw err;
        console.log('Server endded!');

        pool.end(function (err) {
            if (err) throw err;

            process.exit();
        });
    });
}

谢谢!我会尝试的。 - wBB
抱歉回复晚了,但我不得不中断正在进行的工作,一旦回到工作状态,我会立即通知您。谢谢! - wBB
嗨!我回来继续处理这个项目。我知道你提出的建议应该是可行的。然而,我不知道如何将全局连接对象带到 server.close 所在的位置。作为一名初学者,我仍在努力理解“依赖注入”的工作原理。所以在没有“DI”的情况下,我对该项目进行了几次 require 操作,感到有些迷失。我的项目使用Nodejs和Express,同样也是初学者。 - wBB
如果您不想使用依赖注入(DI),可以使用 require。如果您想使用 DI,可以查看此项目 - Wing-On Yuen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接