【问题标题】:exporting a module for creating Connection creates multiple connection in nodejs导出用于创建连接的模块在nodejs中创建多个连接
【发布时间】:2019-09-10 07:26:13
【问题描述】:

我是 nodejs 和 api 开发的新手,我编写了以下代码来创建与数据库的连接并通过调用 connection.query 来使用它们。

这是创建连接模块并在我的模型类中调用它们的代码。我必须动态传递数据库,因为在我的项目中可能有多个数据库。

它正在创建多个数据库连接。如何将其更改为应在整个应用程序中使用的单个数据库连接,快速而无需对代码进行太多更改。

db.js:

var mysql = require('mysql');
module.exports = dbConnection = (dbname) => {
  console.log('mysql inside dynamic db...');
  return connection = mysql.createConnection({

      host: process.env.DBHost || 'localhost',
      port: process.env.DBPort || 3306,
      user: process.env.DBUser || 'root',
      password: process.env.DBPassword || '',
      database: process.env.DBName || dbname
  });

};

查询:

//get financial year
Employee.getYear = function getYear(req_decoded, result) {
    var myPromise = dbname(req_decoded);
    myPromise.then(function(myDBName) {
        new_conn(myDBName).query("Select id,name from " + myDBName + ".financial_year", function(err, res) {
            if (err) {
                //console.log("error: ", err);
                result(null, err);
            } else {
                result(null, JSON.stringify({
                    "statusCode": 200,
                    "status": "success",
                    "data": res
                }));
            }
        });
    });
};

我正在从另一个数据库中获取数据库名称,并使用 promise 来获取数据库名称。

任何帮助将不胜感激。

【问题讨论】:

    标签: node.js database api database-connection


    【解决方案1】:

    不要多次创建连接,创建连接如下:

     // connection.js
        var mysql = require('mysql');
        module.exports = connection = mysql.createConnection({
    
              host: process.env.DBHost || 'localhost',
              port: process.env.DBPort || 3306,
              user: process.env.DBUser || 'root',
              password: process.env.DBPassword || '',
    
          });
    

    };

    如果您只使用一个数据库,那么您也可以将数据库详细信息传递给连接选项。

    连接到主文件中的数据库服务器,比如说 server.js:

    var connection =  require('./connection.js');
    connection.connect(function(err) {
      if (err) {
        return console.error('error: ' + err.message);
      }
    
    
      });
    

    一旦连接,您也可以在其他地方导入相同的连接对象 并像这样运行查询:

    connection.query("Select id,name from " + myDBName + ".financial_year", function(err, res) {});
    

    但在读写次数较多且查询复杂的情况下,不强烈推荐这种方式。我建议您也阅读此内容:When to close MySQL connection using node-mysql?

    【讨论】:

      猜你喜欢
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多