无法从node.js服务器连接到localhost数据库

时间:2013-07-05 16:22:58

标签: mysql node.js node-mysql

尝试连接到我的localhost数据库时遇到了很多麻烦。我尝试过使用mysqlmysql-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并创建一个新用户以确保密码正确,但无济于事。为什么不连接?

由于

7 个答案:

答案 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-networkingOFF

--skip-networking=OFF

你必须重新启动你的服务

systemctl restart mysql.service

它将允许您连接本地主机