在 Node.js 上连接到 MySQL 未初始化

Connecting to MySQL on Node.js not initialized

我无法连接到 MySQL- 数据库。我用谷歌搜索了一些解决方案,但 none 似乎有效,或者我可能不理解它们。这是设置:

let express = require("express");
let mysql      = require("mysql");
let http = require("http");

let app  = express();
http.createServer(app).listen(8000, function() {
    console.log("Listening on http://localhost:" + port)
});

var connection = mysql.createConnection({
    host: "127.0.0.1",
    user: "root",
    password: process.env.DB_PASSWORD,
    database: "users",
    port: 8000
});

connection.connect();

connection.query("SELECT * FROM user", function(err, rows, fields)
{
    if (err) {
        console.error("error connecting: " + err.stack);
        return;
    }

    console.log(rows[0]);
});

connection.end();

尝试与 "socketPath" 和另一个端口建立连接,但它们都 returned 错误:

Error: connect ECONNREFUSED 127.0.0.1:3306
at Object.exports._errnoException (util.js:1034:11)
at exports._exceptionWithHostPort (util.js:1057:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1099:14)
--------------------
at Protocol._enqueue (/vagrant/node_modules/mysql/lib/protocol/Protocol.js:141:48)
at Protocol.handshake (/vagrant/node_modules/mysql/lib/protocol/Protocol.js:52:41)
at Connection.connect (/vagrant/node_modules/mysql/lib/Connection.js:130:18)
at Object.<anonymous> (/vagrant/app.js:12:12)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
at Module.runMain (module.js:605:10)

当连接和侦听在同一个端口上时,它不会return任何错误,但连接似乎没有初始化。

console.log(connection.connect()); // -> undefined

我对使用 MySQL 节点非常陌生,所以我可能做错了,但无法弄清楚问题是什么

将您的 connection.connect() 更改为

connection.connect(function(err) {
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;
  }

  console.log('connected as id ' + connection.threadId);
});

所以你可以看到错误。

编辑: 检查 mysql 配置文件 (/etc/mysql/my.cnf) 中的 bind-addressport。如果您的 mysql 服务器在主机环境中是 运行 并且节点在来宾环境中是 运行 (任何像 docker 这样的虚拟化),请设置 mysql 服务器以侦听您的本地ip (eth0 like 192.168.0.x) 并在节点配置中使用相同的地址

事实证明,我有点傻。我是 运行 Vagrant-server(虚拟服务器)上的应用程序,我试图连接到我的本地服务器。当我尝试连接到 vagrant-server 时,一切正常。我也没有在我的流浪机器上正确安装 mysql-server。

如果您不设置端口或将其设置为 mysql 默认端口,即 3306,它工作正常。

var connection = mysql.createConnection({
    host: "127.0.0.1",
    user: "mysqluser",
    password: 'password',
    database: "yourdatabase"
});

我不知道确切的原因(尽管我尝试了不同的端口),为什么它不是 运行 在不同的端口上,但这里有一个 link 显示如何使用不同的端口号用于连接 mysql.

FYI: You are setting your app to run on 8000 and again the port mysql using in your app is 8000.You must change it to something else.

对于 MAC 使用 MAMP 的用户

var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "root",
    database: "databasename",
    socketPath: '/Applications/MAMP/tmp/mysql/mysql.sock'
});

socketPath 指向 MAMP "mysql.sock" 以允许 NodeJS/Mysql 连接。

注意:以上连接也解决了"Error: connect ECONNREFUSED 127.0.0.1:3306".

我希望这对某人有所帮助。

您必须设置 socketPath,并且在您 运行 您的脚本之前确保您的 MAMP 运行ning 与否。

var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "root",
    socketPath: '/Applications/MAMP/tmp/mysql/mysql.sock'
});

删除您的 port 键值(端口:8000)和 socketPath 如果您添加了, 来自 sql 配置,然后尝试。

var connection = mysql.createConnection({
    host: "127.0.0.1",
    user: "root",
    password: "root",
    database: "users"
});

实际上你的node server占用了8000端口所以不能给不同的进程分配同一个端口

第二个 mysql 是端口 3306 上的 运行。因此您无法通过其他端口连接 mysql。

您可以为 mysql 使用不同的端口,但是通过某些代理传递机制或通过 运行 mysql 自身在特定端口上。

从您的 Xampp 控制面板

启动您的 Mysql 服务器