我已经安装了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正在使用不同的服务器,但我不知道它为什么不在这里工作!
感谢。
答案 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'
});