【发布时间】:2013-09-01 00:52:42
【问题描述】:
我试图弄清楚如何构建我的应用程序以最有效地使用 MySQL。我正在使用 node-mysql 模块。这里的其他线程建议使用连接池,所以我设置了一个小模块 mysql.js
var mysql = require('mysql');
var pool = mysql.createPool({
host : 'localhost',
user : 'root',
password : 'root',
database : 'guess'
});
exports.pool = pool;
现在每当我想查询 mysql 时,我都需要这个模块,然后查询数据库
var mysql = require('../db/mysql').pool;
var test = function(req, res) {
mysql.getConnection(function(err, conn){
conn.query("select * from users", function(err, rows) {
res.json(rows);
})
})
}
这是好方法吗?我真的找不到太多使用 mysql 连接的例子,除了一个非常简单的例子,所有的事情都在 app.js 主脚本中完成,所以我真的不知道约定/最佳实践是什么。
我应该在每次查询后总是使用 connection.end() 吗?如果我在某个地方忘记了怎么办?
如何重写我的 mysql 模块的导出部分以仅返回一个连接,这样我就不必每次都编写 getConnection()?
【问题讨论】:
-
对于那些发现这个并认为“我的代码中到处都是
connection.query”的人——可能是重构的时候了。构建一个提供select、insert、update等的数据库抽象类 - 并且仅在该单个数据库类中使用connection(或pool)... -
@random_user_name 你有任何链接或代码可以实现你的建议吗?
-
@random_user_name 在这种情况下您将如何管理事务?如果在每次查询后释放连接?
-
@JeffRyan 您可以拥有扩展此数据库类的其他类,您可以在其中管理需要特殊事务的特定情况。但我认为random_user_name的建议不一定反对事务......我通常使用类似的模式,在其中我创建一个提供基本方法的基本模型类,例如插入方法需要事务,因为它首先插入一条记录然后按最后插入的 ID 进行选择以检索结果。