Express.js中PUT请求req.body为undefined问题求助
解决Express PUT请求中req.body为undefined的问题
问题根源分析
你的请求失败由三个核心问题导致:
- Express后端未配置JSON请求体解析中间件
- 前端fetch请求未正确序列化数据并设置请求头
- 前后端数据字段不匹配
解决方案步骤
1. 后端添加JSON解析中间件
Express 4.x及以上版本默认不会自动解析JSON格式的请求体,必须手动添加中间件。在你的Express主入口文件(如app.js/server.js)中添加:
const express = require('express'); const app = express(); // 必须在路由注册前添加JSON解析中间件 app.use(express.json()); // 注册parts路由 const partsRouter = require('./routes/parts'); app.use('/parts', partsRouter);
2. 修正前端fetch请求
前端不能直接将JS对象作为请求体发送,需要序列化为JSON字符串,并设置正确的请求头,同时修正字段名(后端期望partname,前端原字段为name):
function UpdatePartfunc(formData, id) { fetch(`http://localhost:3000/parts/${id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', // 必须设置该请求头 }, body: JSON.stringify(formData) // 将JS对象转为JSON字符串 }) .then(response => { // 先校验响应状态,避免非JSON响应解析报错 if (!response.ok) { return response.json().then(err => Promise.reject(err)); } return response.json(); }) .catch(error => console.error('更新失败:', error)); } var id = '6'; const formData = { id: '6', partname: 'Test Part', // 字段名改为后端期望的partname description: 'This is a test part', company: 'Test Company', }; UpdatePartfunc(formData, id);
3. 优化后端错误响应
当前后端报错时返回纯文本Server Error,前端用response.json()解析会触发语法错误,建议改为JSON格式响应:
router.put('/:id', async (req, res) => { try { console.log("data got", req.body); const [rows, fields] = await pool.query( 'UPDATE partimages SET partname = ?, description = ?, company = ? WHERE id = ?', [ req.body.partname, req.body.description, req.body.company, req.params.id ]); res.json(rows); } catch (err) { console.error(err); // 返回JSON格式错误信息 res.status(500).json({ error: 'Server Error' }); } });
验证要点
- 确保
express.json()中间件在路由注册之前加载,否则路由无法解析请求体 - 前端必须设置
Content-Type: application/json,否则后端无法识别请求体格式 - 前后端字段名必须完全匹配(如
partname不能写成name)
内容的提问来源于stack exchange,提问作者Apsan XD
相关产品推荐
相关产品推荐

