如何将相同的MySQL连接用于我的整个Node.js应用程序
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
}
})
});
相关文章:
- Firebase在我的node.js应用程序中没有正常运行
- 获取模板是用我的Node.JS应用程序的新版本Handlebars错误预编译的
- 连接到测试 websocket 服务器有效,但连接到我的 Node.js 服务器失败
- 在我的Node服务器上收到http发布请求时执行脚本
- 我的Node.js WebSocketServer最终终止
- 为什么不'删除所有侦听器后,我的Node.js进程将终止
- 保护我的Node.js应用程序'的REST API
- 我的node.js简单web服务器没有'无法访问父文件夹
- 我的node.js http请求第一次工作,现在它显示了一些错误
- 是否有一种方法可以防止某些IP连接到我的Node.js ('net')服务器
- 我如何从我的Gmail帐户在我的Node.js脚本发送电子邮件
- Nodemon有时不工作在我的node.js应用程序
- 我的Node.js应用程序的反应速度非常慢
- 如何将jquery与我的Node.js EJS模板一起使用
- 不能运行我的Node.Js应用程序与我的机器的IP地址,但可以与本地主机
- Res.json阻塞了我的node/express服务器
- 继续在我的node.js服务器上获得以下警告
- 我如何添加一个自定义值到我的Node.js HTTP请求Express消费
- 找出我的Node.js应用程序当前在哪个AWS Beanstalk环境中运行的最佳实践是什么?
- 试图将我的Node.js应用程序推送到Heroku,错误:使用jade npm的ENOENT