React项目后端index.js连接MySQL无数据写入问题求解
Node.js连接MySQL写入数据无生效问题排查与解决
背景说明
我搭建了一个支持填写电影名称、影评并提交至数据库的前端页面,目前正在尝试将已创建的MySQL数据库与后端index.js连通,写入第一条测试数据,实现代码如下:
const express = require('express'); const app = express(); const mysql = require('mysql'); const db = mysql.createPool({ host: "localhost", user: "root", password:"password", database:'CRUDDatabase', }); app.get('/', (req, res) => { const sqlInsert = "INSERT INTO Movie_Reviews(movieName, movieReview) VALUES (1,'inception', 'good movie');" db.query(sqlInsert, (err, result) =>{ res.send("change done"); }); }) app.listen(3001, () => { console.log("running on port 3001") })
问题现象
运行代码后前端可收到返回的"change done"提示,但数据库中没有新增条目。仅在MySQL Workbench中创建了默认连接,未做其他自定义修改,不确定故障属于代码问题还是数据库配置问题。
报错信息
排查后得到核心报错内容如下:
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
解决方法
该问题是MySQL 8.x默认使用caching_sha2_password认证插件,而Node.js的mysql包暂不支持该认证模式导致,按以下步骤操作即可解决:
- 在MySQL Workbench中执行如下查询语句,注意替换对应参数:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
其中root替换为你的数据库用户名、localhost替换为对应服务地址、password替换为你的数据库密码 - 继续执行
flush privileges;刷新权限,完成后即可通过Node正常连接数据库 - 如果仍未生效,可尝试去掉语句中的
@'localhost'部分后重新执行
内容的提问来源于stack exchange,提问作者Liebertosan
相关产品推荐
相关产品推荐

