如何使node.js MySQL连接池在启动时可用

我的showData.js脚本每次运行时都会调用

var pool  = mysql.createPool({

是否有办法在node.js服务器启动时创建连接池?

我已尝试将createPool添加到server.js,但在调用时似乎无法从showData.js脚本访问该对象

pool.getConnection(function(err,connection){

node.js服务器启动时是否需要启动连接池?

MySQL连接池是否仍然存在即使在调用Connection.Release并且脚本关闭后也是如此?

编辑@marco,我收到ReferenceError:未定义池。我知道问题是我没有将池拉入showData.js。根据node.js的说法,可以多次加载一个模块。

发件人https://nodejs.org/api/modules.html

缓存

模块在第一次加载后被缓存。这 表示每个调用Require(‘foo’)都将获得 返回完全相同的对象,如果它将解析为相同的 文件。

对Required(‘foo’)的多个调用可能不会导致模块代码 被执行了多次。这是一个重要的特点。有了它, 可以返回"部分完成"的对象,从而允许可传递 即使依赖项会导致循环,也要加载它们。

如果您希望一个模块多次执行代码,则导出 函数,然后调用该函数。

这是我的最新设置:

lib/dbpool.js

var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'someco.com',
  user            : 'pinco',
  password        : 'pallino'
});

module.exports = pool;

server.js

const pool = require('./lib/dbpool');

showData.js

'use strict';
module.exports = router => {
    router.route('/show').post((req, res) => {
        pool.query('SELECT * FROM db.users', function(err, rows, fields) {

是否在server.js和showData.js中都需要以下行?

const pool = require('./lib/dbpool');

解决方案

定义一个名为lib/dbpool.js的模块,内容如下:

var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'someco.com',
  user            : 'pinco',
  password        : 'pallino'
});

module.exports = pool;

在您的应用程序代码中使用:

const pool = require('./lib/dbpool');

app.post('/your/app/url', (req, res) => {
  pool.query('your query', function(err, rows, fields) {
    if (err) throw err;
    /* Manage your results here */

  });
}

pool.ery实际执行:pool.getConnection(),然后是Connection.Query(),然后是Connection.Release()

相关文章