繁体   English   中英

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

[英]Connecting to MySQL on Node.js not initialized

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

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”和另一个端口设置连接,但它们都返回错误:

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)

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

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

我对使用 MySQL 节点非常陌生,所以我可能做错了,但不知道问题出在哪里

对于使用 MAMP 的 MAC 用户

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 连接。

注意:上述连接也解决了“错误:连接 ECONNREFUSED 127.0.0.1:3306”。

我希望这可以帮助别人。

将您的connection.connect()更改为

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

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

所以你可以看到错误。

编辑:检查/etc/mysql/my.cnf配置文件( /etc/mysql/my.cnf )中的bind-addressport 如果您的 mysql 服务器在主机环境中运行并且节点在来宾中运行(任何虚拟化,如 docker),设置 mysql 服务器在您的本地 ip.0.x 中使用地址相同的地址 921435Z

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

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

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

我不知道确切的原因(虽然我尝试使用不同的端口),为什么它没有在不同的端口上运行,但这里有一个链接显示如何使用不同的端口号连接 mysql。

仅供参考:您正在将您的应用程序设置为在 8000 上运行,并且在您的应用程序中使用的端口 mysql 再次为 8000。您必须将其更改为其他内容。

您必须设置 socketPath 并在运行脚本之前确保您的 MAMP 是否正在运行。

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

从 sql 配置中删除您的port键值(端口:8000)和socketPath ,然后尝试。

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

实际上你被节点服务器占用了 8000 端口,所以你不能将相同的端口分配给不同的进程。

第二个 mysql 在端口 3306 上运行。因此您无法通过不同的端口连接 mysql。

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

请按照简单的步骤开始(在 windows 机器上工作):

  1. 从以下链接下载并安装 MySQL点击这里 点击这里
  2. 配置下载的文件(我保留了默认配置参数)。 请查看此视频链接以供参考
  3. 确保 MySQL 服务器状态为开启。
  4. 现在您可以使用以下节点代码检查连接状态。

 const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', port: 3306 }); connection.connect((err) => { if (err) throw err; console.log('Connected to MySQL Server'); })

从 Xampp 控制面板启动 Mysql 服务器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM