React+Node.js项目无法连接MySQL数据库,数据无法写入求助
解决React+Node.js+MySQL项目的数据库连接失败问题
你的Node.js代码只创建了数据库连接对象,但没有主动发起连接,也没有配置连接错误的监听逻辑,这就是连接失败却无报错的核心原因。以下是分步解决方案:
1. 主动发起数据库连接并添加错误处理
在创建db连接对象后,必须调用connect()方法发起连接,并通过回调捕获连接错误。修改你的Node.js代码:
const express = require("express"); const app = express(); const mysql = require("mysql"); const cors = require("cors"); const PORT = 3001; app.use(cors()); app.use(express.json()); const db = mysql.createConnection({ user: "root", host: "localhost", password: "root", database: "passwordmanager", }) // 新增:主动发起连接并处理连接错误 db.connect((err) => { if (err) { console.error("数据库连接失败:", err); return; } console.log("已成功连接到MySQL数据库"); }) app.post("/addpassword",(req,res)=>{ const {password,title} =req.body; db.query("INSERT INTO passwords (password,title) VALUES (?,?)",[password,title],(err,result)=>{ if(err){ console.log(err); return res.status(500).send("数据库操作失败"); } res.send("Success"); }) }) app.listen(PORT,()=>{ console.log("server is running on port", PORT) })
2. 验证数据库基础配置的正确性
- 确认MySQL服务正在运行:本地环境下检查XAMPP/WAMP的MySQL服务是否启动,或通过命令行执行
net start mysql(Windows)/sudo systemctl start mysql(Linux/Mac)确认服务状态。 - 核对数据库账号密码:确保
root用户的密码和代码中配置的password: "root"一致,若MySQL root无密码,需将该项设为""。 - 确认目标数据库和表存在:
- 登录MySQL控制台,执行
USE passwordmanager;,若报错说明数据库未创建,需先执行CREATE DATABASE passwordmanager;。 - 执行
DESC passwords;,确认表中存在password和title两个字段,若表未创建,需执行:CREATE TABLE passwords ( id INT AUTO_INCREMENT PRIMARY KEY, password VARCHAR(255) NOT NULL, title VARCHAR(255) NOT NULL );
- 登录MySQL控制台,执行
3. 完善前端请求的错误反馈
你的前端Axios请求没有处理错误,即使后端连接失败,前端也无法感知。修改addPassword函数:
const addPassword= ()=>{ Axios.post("http://localhost:3001/addpassword",{ password: password, title:title }) .then(response => { console.log(response.data); // 可添加成功后的UI反馈,比如清空输入框 setPassword(""); setTitle(""); }) .catch(error => { console.error("请求失败:", error); alert("添加密码失败,请检查服务状态"); }); }
内容的提问来源于stack exchange,提问作者Shubhankar Sharma
相关产品推荐
相关产品推荐

