ExpressJs中req.body返回undefined 调用axios.patch删MongoDB数组数据异常
排查步骤
Postman请求正常说明后端接口逻辑本身没有问题,故障出在前端传参格式或请求头配置上,按以下步骤排查即可:
- 核对前端
deleteTask接口的传参格式
调用接口时第二个参数必须是{task: 要删除的任务内容}的结构,不能直接传入任务字符串,也不能用data作为字段名。正确调用示例:// 错误示例1:直接传字符串 deleteTask(id, '完成作业') // 错误示例2:字段名错误 deleteTask(id, {data: '完成作业'}) // 正确示例:使用task作为字段名包裹内容 deleteTask(id, {task: '完成作业'}) - 检查axios配置和后端解析中间件
- 确认axios实例没有强制修改
Content-Type请求头,发送JSON格式请求时请求头应为application/json,可以在浏览器开发者工具的Network面板查看对应PATCH请求的请求头和请求载荷,确认载荷内容符合预期结构 - 确认后端入口代码已经添加JSON解析中间件,Express 4.16+ 版本内置解析中间件,无需单独安装body-parser:
app.use(express.json()) - 确认axios实例没有强制修改
- 补全后端接口返回逻辑
当前后端代码执行更新操作后没有返回响应,会导致前端请求超时,需要补充返回逻辑:export const deleteTask = async (req,res) => { const { id } = req.params; console.log(req.body); if(!mongoose.Types.ObjectId.isValid(id)) { return res.status(404).json(`Invalid ID`); } const updatedData = await TodoModels.findByIdAndUpdate(id,{$pull:{ task: req.body.task }},{ new: true }); return res.status(200).json(updatedData) }
内容的提问来源于stack exchange,提问作者Gino
相关产品推荐
相关产品推荐

