You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express.js中PUT请求req.body为undefined问题求助

解决Express PUT请求中req.body为undefined的问题

问题根源分析

你的请求失败由三个核心问题导致:

  1. Express后端未配置JSON请求体解析中间件
  2. 前端fetch请求未正确序列化数据并设置请求头
  3. 前后端数据字段不匹配

解决方案步骤

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 02:05:55