[英]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-address
和port
。 如果您的 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 机器上工作):
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.