如何使用Redux向MERN项目后端及MongoDB调度提交表单数据
问题排查与解决方案
最高概率原因:后端未配置JSON请求体解析中间件
Express默认不会自动解析application/json格式的请求体,你提交的数据没有被正确识别,导致req.body为空对象,写入数据库时只有默认字段有值。
修复方式:在后端主入口文件(通常为server.js/app.js)中,路由挂载代码前添加如下配置:
// 解析JSON格式请求体 app.use(express.json()) // 若有表单提交场景可额外添加以下配置 app.use(express.urlencoded({ extended: true }))
次高概率原因:路由绑定错误
检查你的后端路由配置文件(通常存放在routes/目录下),确认POST请求的处理函数和你控制器导出的createLandlords函数完全匹配,示例正确配置如下:
import express from 'express'; import { getLandlords, createLandlords } from '../controllers/landlords.js'; const router = express.Router(); router.get('/', getLandlords); router.post('/', createLandlords); // 此处函数名必须和控制器导出的名称完全一致 export default router;
验证排查方式
在控制器的createLandlords函数第一行添加日志打印:
export const createLandlords = async (req, res) => { console.log('收到的请求体:', req.body) // 新增此行 const details = req.body; // 剩余原有逻辑 }
重启后端服务后提交表单,查看后端控制台输出:
- 若打印为空对象:优先排查上述两个问题,再核对前端请求的
Content-Type是否为application/json(axios默认配置即为该值,无需手动修改) - 若打印为包含字段的正常对象:核对你提交的对象key和Schema定义的字段名是否完全一致(大小写敏感)
说明
你当前的Redux调度逻辑是正常的,表单数据能打印说明前端状态收集没问题,问题基本出在后端配置层。
内容的提问来源于stack exchange,提问作者Tarek ElShennawy
相关产品推荐
相关产品推荐

