如何将MySQL与nodejs控制器连接?

时间:2016-08-25 16:47:17

标签: javascript mysql node.js wrapper connection-pooling

我在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文件存在一些与格式相关的问题,因为没有启动正确的连接。还有其他原因,但我怀疑的原因似乎非常强烈。

我需要一些解决这个问题的指导。任何帮助将不胜感激。

0 个答案:

没有答案