我在sails nodejs上有一个服务器,我试图通过一个可以创建连接池的包装文件将我的控制器与我的MySQL数据库连接起来。我的目的是每次任何控制器中的函数需要与DB交互时使用该池,并且以交互开始时创建连接并且在交互结束时关闭连接的方式。为此,我创建了一个包装文件 db.js
db.js
var mysql = require('mysql');
var connection = mysql.createConnection({
host:"localhost",
port: '3306',
user:"ye_old_username",
password:"ye_old_password",
database: "ye_old_schema"
});
module.exports = connection;
现在,我正在创建一个名为 ConnectionPool.js
的连接池ConnectionPool.js
var mysql = require('mysql'),
config = require("./db");
/*
* @sqlConnection
* Creates the connection, makes the query and close it to avoid concurrency conflicts.
*/
var sqlConnection = function sqlConnection(sql, values, next) {
// It means that the values hasnt been passed
if (arguments.length === 2) {
next = values;
values = null;
}
var connection = mysql.createConnection(config);
connection.connect(function(err) {
if (err !== null) {
console.log("[MYSQL] Error connecting to mysql:" + err+'\n');
}
});
connection.query(sql, values, function(err) {
connection.end();
if (err) {
throw err;
}
next.apply(this, arguments);
});
}
module.exports = sqlConnection;
我已按照此问题解答的方法创建连接池:How to provide a mysql database connection in single file in nodejs
最后,我试图使用包装器和连接池从控制器运行一个函数。 控制器中的代码是
var connPool = require('./ConnectionPool');
module.exports = {
testConn: function(req, res){
connPool('SELECT * from user where ?', {id: '1'}, function(err, rows) {
if(err){
sails.log.debug(err);
}else{
console.log(rows);
}
});
}
};
所有三个文件,包装器,连接池和控制器都在同一个Controllers文件夹中。
现在,当我通过客户端向URL发送请求时,会调用控制器内的 testConn 函数,我在服务器日志中得到以下响应:
[MYSQL] Error connecting to mysql:Error: ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)
此错误来自连接池文件中的行connection.connect(function(err) {
。
当我尝试通过命令行上的相同凭据登录我的MySQL数据库时,我通过它。因此,我认为db.js文件存在一些与格式相关的问题,因为没有启动正确的连接。还有其他原因,但我怀疑的原因似乎非常强烈。
我需要一些解决这个问题的指导。任何帮助将不胜感激。