【发布时间】:2014-10-18 13:18:10
【问题描述】:
我已经安装了 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 在不同的服务器上工作,但我不知道为什么它不能在这里工作!
谢谢。
【问题讨论】:
-
您可以从另一台服务器连接的事实表明您的用户设置不正确。 MySQL 用户通常按主机设置(或
*用于所有主机)。检查是否有用户可以从运行您的节点应用程序的服务器的 IP 访问 -
如果你运行
netstat -nlp,你看到mysql服务器运行在3306上吗?如果没有,您也可以将socketPath设置为unix 套接字的路径,而不是设置host。 -
我能够从 Apache2 连接到 MySQL,并且 MySQL 工作正常。我想知道为什么它不能与 Node.js 一起使用,我无法理解他们只有一般错误的错误。谢谢你的帮助。我已经用 netstat 输出更新了帖子
-
你用的是什么版本的node、npm和mysql?