如何将相同的MySQL连接用于我的整个Node.js应用程序

How do I use the same MySQL connection(s) for my entire Node.js app?

本文关键字:我的 Node 应用程序 js 用于 连接 MySQL      更新时间:2023-09-26

我有一个app.js。我从那里运行我的整个应用程序。

在app.js中,我require许多包含代码的文件。

对于这些文件中的每一个,我都这样做:

var mysql = require('mysql');
var mclient = mysql.createConnection({
    host: settings.MYSQL.HOST,
    user: settings.MYSQL.USER,
    password: settings.MYSQL.PASSWORD,
    database: settings.MYSQL.DB,
});

从本质上讲,我正在为每个文件启动一个新的连接。

我希望我的app.js建立一个连接,然后在require行中将其传递给每个文件。我如何将连接传递给他们,以便这些文件可以使用它?

(或者我如何将连接池传递给它们?)

您可以创建一个单独的模块,称之为mysqlLib.js,负责创建池并返回连接:

var mysql = require("mysql");
var pool = mysql.createPool(/* credentials go here */);
exports.getConnection = function(callback) {
  pool.getConnection(function(err, conn) {
    if(err) {
      return callback(err);
    }
    callback(err, conn);
  });
};

在任何需要mysql连接的模块/文件中,您都可以这样做:

var mysqlLib = require("mysqlLib");
mysqlLib.getConnection(function(err, mclient) {
  //do queries that you need
});

按照require()的工作方式,mysqlLib.js中的代码将只运行一次,因此即使在多个文件中调用require("mysqlLib.js"},也只能创建一个池。有关模块缓存的解释,请参阅node.js文档的这一部分。

是的,您可以使用mclient附加查询

var mysqlLib = require("mysqlLib");
mysqlLib.getConnection(function(err, mclient) {
  //do queries that you need
  var sql = '//Your SQL here';
  var inserts = [your inserts here];
  sql = mysql.format(sql, inserts);
  mclient.query(sql, function (err, rows) {
  if (err) {
                //handle error here
            }
  })
});