Node.js Mysql节点池-释放节点中的连接错误和单例
configuration.jsNode.js Mysql节点池-释放节点中的连接错误和单例,node.js,express,node-mysql,Node.js,Express,Node Mysql,configuration.js var mysql = require('mysql'); var pool = mysql.createPool({ connectionLimit : 10, host : 'localhost', user : 'root', password : '', database : 'test' }); pool.getConnection( f
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 10,
host : 'localhost',
user : 'root',
password : '',
database : 'test'
});
pool.getConnection( function(err, connection) {
if (err) console.error('error connecting: ' + err.stack);
return;
});
module.exports = pool;
user.js模型文件
var async = require("async");
var homePage = function HomePage( user_id ) {
this.user_id = user_id;
this.db = require('../config/configuration');
}
homePage.prototype.getCourse = function( callback ){
var self = this;
self.db.query(' my sql query ', [ self.user_id ], function (error, results, fields) {
self.db.release();
callback(err,results);
});
};
我已经在这里导出了我的db连接,并且在每个模型文件中都需要该模块(configuration.js)。我假设它每次都会从以下位置加载相同的db连接:
如果require('foo')解析为同一个文件,则每次调用require都会返回完全相同的对象
由于这是我第一次用JS和异步编程进行编码,我对一些事情感到困惑。我想为我的db文件加载一个类似于单例模式的配置文件。我的方法正确吗
当我执行-self.db.release()时,我假设我正在释放回池的连接。但它给出了一个错误,我无法找出它,因为其他一切都正常工作。错误是-
self.db.release() is not a function
如果我评论这句话,它的工作很好。是否有一种方法可以查看此版本返回的内容,因为它将有助于调试
此外,我的方法是正确的 js返回一个池,而不是连接本身。池没有
release
方法。要使其正常工作,您应该从池中获取一个连接,并在连接上运行查询-self.db.getConnection(function(err,connection){connection.query()}
,然后在connection.query
回调中关闭连接,调用connection.release()
@tiblu这很有帮助。谢谢。我应该仔细阅读文档。你能就我的方法和任何改进提出建议吗?我认为你的方法没有问题。我们可以通过几种不同的方式实现相同的结果,但最重要的是解决问题,感觉良好。玩得开心!