本地MERN应用POST请求出现500内部服务器错误求助
MERN应用POST请求500内部服务器错误修复方案
本地运行的MERN应用中,前端(端口3000)向后端(端口5035)发送POST请求POST http://localhost:5035/api/todos时出现500内部服务器错误,该请求通过POSTMAN可正常执行,但前端调用失败。以下是针对性修复方案:
一、前端请求数据格式错误
前端addTodo方法中,axios发送的{ todo }是包含text属性的对象,但后端Model要求todo字段为字符串类型,导致数据库存储验证失败。
修复代码:
try { await axios.post("http://localhost:5035/api/todos", { todo: todo.text // 提取text属性值,传递字符串而非整个对象 }); } catch (error) { console.log(error); }
二、后端Model语法错误
Model.js中Schema定义缺失闭合花括号,导致代码解析失败。
修复代码:
const mongoose = require("mongoose"); const MyTodoListSchema = new mongoose.Schema({ todo: { type: String, default: "", required: true } // 补充todo字段的闭合花括号 }); // 补充Schema定义的闭合花括号 const MyTodoList = mongoose.model("MyTodoList", MyTodoListSchema, 'coltodolist'); module.exports = MyTodoList;
三、后端Controller语法错误
Controller.js的getAllTodo方法中,.select()语句后多了一个多余的),导致代码语法错误,影响路由正常运行。
修复代码:
//get all todos exports.getAllTodo = (req, res) => { res.setHeader("Access-Control-Allow-Origin", "*") res.setHeader("Access-Control-Allow-Credentials", "true"); res.setHeader("Access-Control-Max-Age", "1800"); res.setHeader("Access-Control-Allow-Headers", "content-type"); res.setHeader( "Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, PATCH, OPTIONS" ); MyTodoList.find() .select('taskId todo priority') // 移除多余的闭合括号 .then((allTodo) => { return res.status(200).json({ Todo: allTodo }); }) .catch((err) => { res.status(500).json({ success: false, message: 'Server error. Please try again.', error: err.message, }); }); }
额外优化建议
- 后端已通过
app.use(cors())配置跨域,getAllTodo方法中重复设置的CORS头可删除,避免冗余。 - 前端
setTodos(newTodos)后,console.log(todos)无法打印最新数组状态(setState为异步操作),可改为console.log(newTodos)或用useEffect监听todos变化。
内容的提问来源于stack exchange,提问作者degr8sid
相关产品推荐
相关产品推荐

