尝试连接到我的localhost数据库时遇到了很多麻烦。我尝试过使用mysql和mysql-simple节点模块,但在这两种情况下我都无法连接它。
这是我在'mysql'模块中使用的内容:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
port : '8000',
user : 'uber',
password : 'pass',
});
connection.connect(function(err) {
if (err) throw err;
console.log('Connection Successful');
});
connection.query('USE someDB', function(err) {
if (err) throw err;
console.log('Query Successful');
});
这里'我用'mysql-simple'模块:
var database = require('mysql-simple');
database.init('uber', 'pass', 'mysql', 'localhost', 8000);
database.querySingle('SELECT Host FROM user', function(err, results) {
if (err) {
console.log('error fetching some active users: ' + err);
return;
}
log('Query Successful');
for (var i = 0; i < results.length; i++)
console.log('got active user ' + results[i]);
}
在这两种情况下,当我运行我的node.js服务器时,它从不记录它的连接。我尝试用'127.0.01'替换localhost并创建一个新用户以确保密码正确,但无济于事。为什么不连接?
由于
答案 0 :(得分:6)
网络最有可能被关闭,这意味着mysql服务器通过UNIX套接字而不是通过TCP / IP与客户端通信。您可以检查运行mysql客户端并运行“status”命令。如果你看到那里的端口号,那么你的mysql服务器通过TCP / IP进行通信,否则你会看到类似“socket pathname ...”的东西,获取路径名并将其提供给node.js连接参数,例如
... socketPathname:'/ opt / lampp / var / ...', ...
在https://github.com/felixge/node-mysql页面中查看(搜索“socketPathname”)
希望,这是你的问题。
答案 1 :(得分:1)
更改此
database.init('uber', 'pass', 'mysql', 'localhost', 8000);
到
database.init('uber', 'pass', 'mysql', 'localhost', 3306);
你应该通过
答案 2 :(得分:1)
确保MySQL和Express在同一端口上运行。 我从XAMPP捆绑了MySQL,它运行在3036端口。 在将app.listen设置为3036时,我的代码工作正常。终于!
答案 3 :(得分:1)
您应该使用mysql_config来显示套接字的路径。
这是我MAC上的一个样本
QuyLes-MacBook-Pro:freelancer quyle$ mysql_config
Usage: /Applications/MAMP/Library/bin/mysql_config [OPTIONS]
Options:
--cflags [-I/Applications/MAMP/Library/include -fno-omit-frame-pointer -g -DNDEBUG]
--include [-I/Applications/MAMP/Library/include]
--libs [-L/Applications/MAMP/Library/lib -lmysqlclient -lz]
--libs_r [-L/Applications/MAMP/Library/lib -lmysqlclient_r -lz]
--plugindir [/Applications/MAMP/Library/lib/plugin]
--socket [/Applications/MAMP/tmp/mysql/mysql.sock]
--port [0]
--version [5.5.42]
--libmysqld-libs [-L/Applications/MAMP/Library/lib -lmysqld]
--variable=VAR VAR is one of:
pkgincludedir [/Applications/MAMP/Library/include]
pkglibdir [/Applications/MAMP/Library/lib]
plugindir [/Applications/MAMP/Library/lib/plugin]
然后,为yourMysqlConnection添加密钥socketPath 吼叫我的样本
MysqlServer: {
adapter: 'sails-mysql',
host: 'localhost',
user: 'root', //optional
password: 'root', //optional
database: 'nodejs', //optional,
socketPath: '/Applications/MAMP/tmp/mysql/mysql.sock'
},
答案 4 :(得分:0)
试试这段代码,这对我有用
var mysql = require('mysql');
var connection = mysql.createConnection(
{
host : 'localhost',
user : 'root',
password : '',
database : 'urdatabase',
}
);
connection.connect();
query = connection.query("SELECT * FROM UrTable;");
query
.on('error', function(err) {
console.log( err );
})
.on('result', function( data ) {
socket.emit('YourData',data);
});
我希望这会对你有所帮助
答案 5 :(得分:0)
就我而言,什么都发生了,所以我通过使用新用户为Node.js应用生成新的GRANT来解决了问题
答案 6 :(得分:0)
这是由于在 MySQL 配置中关闭了网络。
在 Ubuntu 20.04.2 和 MySQL 8.x.x(它在我的情况下有效)中,您可以在
中找到此设置 <块引用>/etc/systemd/system/mysql.service.d/override.conf
会有一个 ExecStart 键,它有多种配置。 您可以在此处提供 --skip-networking 为 OFF
--skip-networking=OFF
你必须重新启动你的服务
systemctl restart mysql.service
它将允许您连接本地主机