Node.js MySQL - 错误:连接ECONNREFUSED

Nic*_*ico 17 mysql apache node.js

我使用Node.js服务器端.我在localhost上尝试了我的代码,一切正常.我买了一台服务器并在其上安装了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'
    });
}
Run Code Online (Sandbox Code Playgroud)

我使用以下命令启动node.js服务器:

$ node server.js
Run Code Online (Sandbox Code Playgroud)

当我加载页面时,它正确显示,但当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)
Run Code Online (Sandbox Code Playgroud)

shr*_*oye 68

我遇到了同样的问题,但我通过改变解决了这个问题

host:  'localhost'
Run Code Online (Sandbox Code Playgroud)

host:   '127.0.0.1'
Run Code Online (Sandbox Code Playgroud)

  • 这有效。我只是想知道可能有什么解释?我知道本地主机的IP是127.0.01 (9认同)
  • 谢谢,它对我有用,因为我通过 nvm 运行节点 19,但它没有连接,即使在使用节点 16 时它已连接。 (2认同)

tde*_*roc 31

您需要将值添加socket path到配置对象:

socketPath: '/var/run/mysqld/mysqld.sock'
Run Code Online (Sandbox Code Playgroud)

在MAMP中,你转到http:// localhost:8888/MAMP,你会发现:

/Applications/MAMP/tmp/mysql/mysql.sock
Run Code Online (Sandbox Code Playgroud)

最后你有:

var connection = mysql.createConnection({
  host     : config.host,
  user     : config.user,
  password : config.pass,
  database : config.db,
  socketPath: '/Applications/MAMP/tmp/mysql/mysql.sock'
});
Run Code Online (Sandbox Code Playgroud)


har*_*nam 17

检查服务器中的MySQL端口.

在MAMP中,默认情况下它使用8889.

将其添加到您的连接配置中.

你的MySQL配置应该是这样的.

this.pool = mysql.createPool({
  connectionLimit: 10,
  host: 'localhost',
  user: 'root',
  password: 'root',
  database: 'todo',
  port: '8889'
});
Run Code Online (Sandbox Code Playgroud)

  • 我没有港口。谢谢,谢谢!帮助了! (2认同)

小智 6

回复:关于 localhost 与 127.0.0.1 的问题(我没有足够的声誉来添加评论:-( ) - /sf/answers/3747318431/

我遇到了同样的问题,我host: "localhost"通过使用解决了它"127.0.0.1"

我收到错误Error: connect ECONNREFUSED ::1:3306- 我最终意识到它正在报告 IPv6 本地地址。尽管我使用 @'%' 和 @'localhost' 定义了 MySQL 用户,但看起来 MySQL 不喜欢 IPv6 本地地址 - 可能与我的 MySQL 设置有关。


小智 5

检查你的 xampp 服务器 mysql 是否正在运行