无法通过Nodejs连接到MySQL

时间:2014-08-25 11:39:33

标签: mysql node.js

我已经安装了Node.js,如下所示:

root@server1:~#apt-get install nodejs

然后按如下方式安装npm:

root@server1:~#apt-get install npm

然后将MySQL模块安装在服务器目录中,如下所示:

root@server1:~#cd /var/www/
root@server1:/var/www# npm install mysql

以下是node.js服务器(server.js)的代码(使用正确的凭据而不是xxx):

var mysql = require('mysql');

var db_config = {
    host      : 'localhost',
    user      : 'xxx',
    password  : 'xxx',
    database  : 'xxx'
};

var connection;

function handleDisconnect(){

    connection = mysql.createConnection(db_config);


    connection.connect(function(err) {
        if(err) {
            console.log('error when connecting to db:', err);
            setTimeout(handleDisconnect, 2000);
        }
    });

    connection.on('error', function(err) {
        console.log('db error', err);
        if(err.code === 'PROTOCOL_CONNECTION_LOST') {
            handleDisconnect();
        }
        else{
             throw err;
        }
    });
 }

 handleDisconnect();   

当我像下面那样运行Node.js服务器时:

root@server1:~#node /var/www/server.js

我得到一般错误!它在下面:

error when connecting to db: { [Error: connect ECONNREFUSED]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect',
fatal: true }

更新:

我可以从PHP(Apache2)连接到MySQL,MySQL在我的Ubuntu 12.04服务器上工作正常,如下所示:

root@server1:~# netstat -ltnp | grep 3306

输出:

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      556/mysqld

请问您如何解决此问题? Node.js正在使用不同的服务器,但我不知道它为什么不在这里工作!

感谢。

1 个答案:

答案 0 :(得分:2)

您需要将socket path的值添加到db_config对象:

db_config.socketPath =  '/var/run/mysqld/mysqld.sock'

例如在MAMP中,您转到http://localhost:8888/MAMP,然后找到:

/Applications/MAMP/tmp/mysql/mysql.sock

最后你有:

var connection = mysql.createConnection({
  host     : db_config.host,
  user     : db_config.user,
  password : db_config.pass,
  database : db_config.db,
  socketPath: '/Applications/MAMP/tmp/mysql/mysql.sock'
});