[英]How do I use the same MySQL connection(s) for my entire Node.js app?
我有一个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
}
})
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.