【发布时间】:2015-07-27 18:35:35
【问题描述】:
我使用 Node.js 服务器端。我在本地主机上尝试了我的代码,一切正常。我购买了一台服务器并在其上安装了 Apache 和 node.js 并在那里测试我的 Web 应用程序。我正确地将 MySQL 连接配置从 localhost 更改为服务器配置。
我使用此配置测试我的 Web 应用程序:
var mysql = require('mysql');
var mysqlConnection;
function new_mysqlConnection() {
mysqlConnection = mysql.createConnection({
host : 'myurl.at',
user : 'myusername',
database : 'mydatabase',
password : 'mypassword'
});
}
我使用以下命令启动 node.js 服务器:
$ node server.js
当我加载页面时,它显示正确,但是当 Node.js 尝试连接到数据库时,我总是收到以下错误:
Error: connect ECONNREFUSED
at errnoException (net.js:905:11)
at Object.afterConnect [as oncomplete] (net.js:896:19)
--------------------
at Protocol._enqueue (/var/www/node_modules/mysql/lib/protocol/Protocol.js:135:48)
at Protocol.handshake (/var/www/node_modules/mysql/lib/protocol/Protocol.js:52:41)
at Connection.connect (/var/www/node_modules/mysql/lib/Connection.js:119:18)
at reconnectDb (/var/www/server.js:319:18)
at app.get.email (/var/www/server.js:109:2)
at Layer.handle [as handle_request] (/var/www/node_modules/express/lib/router/layer.js:82:5)
at trim_prefix (/var/www/node_modules/express/lib/router/index.js:302:13)
at /var/www/node_modules/express/lib/router/index.js:270:7
at Function.proto.process_params (/var/www/node_modules/express/lib/router/index.js:321:12)
at next (/var/www/node_modules/express/lib/router/index.js:261:10)
【问题讨论】:
-
要么你的主机错误,要么你需要指定一个端口号。你的 mysqld 运行的端口是什么?解决这个问题后,另一种可能是你主机上的端口被阻塞了。您通过什么类型的网络连接?通常我们通过 localhost 或内部网络连接,而不是 Internet。
-
@beiller 首先感谢您的快速回答。我已经尝试过在配置中设置端口,但它也不起作用。 Mysql 在此端口上运行:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 4322/mysqld我的 server.js 在端口 2000 上运行,两者应该在同一个端口上运行吗? “您通过什么类型的网络连接”是什么意思?坦克你! -
不,它们不在同一个端口上运行。您的错误消息基本上意味着“您的连接被操作系统拒绝” IE 您从未接近触摸 mysql 服务器。通过问什么网络,我问,mysql和你的node.js应用程序是在同一个物理服务器上运行的吗?
-
是的 mysql 和 node.js 在同一台物理服务器上运行,但我已经解决了问题。我必须像这样在mysql连接配置中添加socketPath:
socketPath: '/var/run/mysqld/mysqld.sock'但是谢谢你的时间! :) -
@Nico 您会接受以下答案还是自己回答?似乎显示了您使用的解决方案。这个答案也对我有用。