如何在 Windows 上使用 Node JS 访问 MariaDB

Posted

技术标签:

【中文标题】如何在 Windows 上使用 Node JS 访问 MariaDB【英文标题】:How to acces MariaDB with NodeJS on Windows 【发布时间】:2019-10-20 19:05:00 【问题描述】:

我刚刚下载了适用于 Windows 的 MariaDB 10.3,创建了一个数据库并尝试使用 mysql 库从 NodeJS 服务器进行连接。

var mysql = require('mysql');
var con = mysql.createConnection(
  host: "localhost", 
  user: "root",
  password: "MariaDBPass",
  database:'DB_NAME',
);

con.connect(function(err) 
  if (err) throw err;
  console.log("Connected!");
  con.query(sql, function (err, result) 
    if (err) throw err;
    console.log("Result: " + result);
  );
);

我在 Ubuntu 上尝试过,它可以工作,但在 windows 上它会引发非 sql 错误:

Client does not support authentication protocol requested by server; consider upgrading MariaDB client

我很生气,这可能是 MySQL 8.0 和库之间的不兼容 (mysql)。 我已经尝试将用户更改如下:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'

但它说

有一个 SQL 语法错误

关于如何解决这个问题的任何想法?

【问题讨论】:

降级到什么级别? 【参考方案1】:

我不知道这会有多大帮助,但使用以下设置:

MariaDB 10.3 (x64) Windows 10 专业版(内部版本 17763) mysql 模块 v2.16.0. Node.js v10.15.1

以下代码按预期工作:

var mysql = require('mysql');
var con = mysql.createConnection(
    host: "localhost", 
    user: "some_user",
    password: "some_password",
    database: 'testdb'
);

let sql = "select * from test_table";

con.connect(function(err) 
    if (err) throw err;
    console.log("Connected!");
    con.query(sql, function (err, result) 
        if (err) throw err;
        console.log("Result: " + JSON.stringify(result));
    );
);

我得到如下输出:

["id":1,"name":"Mike Smith","id":2,"name":"Joe Brown"]

创建我做的用户(使用 MariaDB mysql.exe,使用 root 用户):

use testdb;

create user 'some_user'@'localhost' identified by 'some_password';

grant all privileges on testdb.* to 'some_user'@'localhost';

这可能有点宽松,但可以用于测试连接。

我也可以连接root用户。

如果你想设置root用户密码,试试:

use mysql;

update user set password=PASSWORD('password') where user='root'and host='localhost';

flush privileges;

我创建了一个简单的数据库“testdb”和表“test_table”,其中包含几行用于查询。

如果可以的话,我建议也许升级你的 mysql 模块版本。也可以看看 Node.js 版本。

【讨论】:

我做了和你一样的设置,但仍然是同样的错误。您是否对用户进行了一些更改?你也用过root用户吗? 我授予用户访问相关数据库的权限。差不多就是这样! 我会非常感谢它!非常感谢 奇怪,我将端口从默认值更改为另一个值,现在它工作正常。 我认为 Linux 的 ubuntu 终端有问题,因为我尝试使用 apt 从 repos 下载 mariadb

以上是关于如何在 Windows 上使用 Node JS 访问 MariaDB的主要内容,如果未能解决你的问题,请参考以下文章

如何在Windows上运行带有Node.js的Nginx?

如何在 Windows 上升级 node.js?

如何在 Windows 上安装 Node 14 版本

在 Windows 上安装多个版本的 Node.js,而不使用 NVM for Windows

如何在 Windows 上安装旧版本的 node.js?

如何使用 CLI 在 Windows 操作系统中将 node.js 6.x 更新为 8.x