前端数据无法存入MySQL数据库:无法触发Express的POST函数
解决前端POST请求404及无法触发Express路由的问题
核心问题现象
- 前端通过Axios发送POST请求到
http://localhost:3400/Registration时返回404错误,无法进入Express的app.post("/Registration")回调函数;后端控制台仅输出jej your serveer is running!,未出现预期的hej日志。
分步解决方案
修复端口不匹配问题
后端Express监听的是3001端口(代码中app.listen(3001)),但前端请求指向的是3400端口,这是直接导致404的原因。- 方案1:修改前端Axios请求地址为
http://localhost:3001/Registration - 方案2:将后端
app.listen(3001)改为app.listen(3400),确保前后端端口一致
- 方案1:修改前端Axios请求地址为
修正数据库名称特殊字符问题
数据库名称gdje_si_veceras?包含问号?,可能导致MySQL连接失败(即使路由触发也无法执行后续数据库操作),需修改为合规名称:- 将数据库名改为
gdje_si_veceras,同时更新后端连接配置中的database字段
- 将数据库名改为
额外验证步骤(若端口修正后仍无效果)
- 确认前端请求方法为POST,且请求头包含
Content-Type: application/json(Axios默认已配置,手动封装时需检查) - 添加根路由测试服务器连通性:
访问app.get("/", (req, res) => { res.send("Server is accessible"); });http://localhost:对应端口/,若能收到响应则服务器正常,再重新测试POST请求
- 确认前端请求方法为POST,且请求头包含
修正后的后端代码示例
const express = require('express') const app = express() const mysql = require('mysql') const cors = require('cors') app.use(cors()) app.use(express.json()) // 修正数据库名称,移除特殊字符问号 const db = mysql.createConnection({ user: 'root', host: 'localhost', password: '', database: 'gdje_si_veceras' }) app.post("/Registration", (req, res) => { console.log("hej") const { firstName, lastName, email, password } = req.body db.query( "INSERT INTO users(firstName, lastName, email, password) VALUES (?,?,?,?)", [firstName, lastName, email, password], (err, result) => { if (err) { console.log(err) return res.status(500).send("插入数据失败") } res.send("Values Inserted") } ) }) // 改为前端请求的3400端口,或保持3001并修改前端请求地址 app.listen(3400, () => { console.log("jej your server is running!") })
内容的提问来源于stack exchange,提问作者user19460705
相关产品推荐
相关产品推荐

