我有一个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文档的此部分.