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

Postman中form-data传参req.body为undefined,raw JSON正常的问题

问题原因与解决方案

是的,你缺少处理multipart/form-data格式请求的中间件配置。body-parser以及Express内置的express.urlencoded都不支持解析form-data类型的请求,这就是用该格式发送请求时req.body返回undefined的核心原因。

解决步骤:

  1. 安装专门处理multipart/form-data的中间件multer:
npm install multer
  1. 配置并应用multer中间件:
    由于你当前仅需处理普通文本字段(无文件上传),可以使用multer().none()配置,该配置会解析form-data中的所有文本字段并挂载到req.body上。

方式一:全局路由级配置(修改app.js)

const express = require('express');
const app = express();
const hostname = '127.0.0.1';
const port = 3000;
const path = require('path');
const multer = require('multer');

// 配置multer仅处理文本字段
const upload = multer().none();

// 移除冗余的body-parser依赖配置(Express 4.16+已内置对应功能)
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 给/products路由应用multer中间件
app.use('/products', upload, require('./Routes/products.js'));

app.set("view engine", "ejs");

app.listen(port, () => {
  console.log(`Listening to http://${hostname}:${port}`);
});

module.exports = app;

方式二:单个路由配置(修改product.js)

const express = require('express');
const router = express.Router();
const path = require('path');
const Product = require('../Models/product.js');
const multer = require('multer');

// 配置multer仅处理文本字段
const upload = multer().none();

// Post
router.post('/', upload, async (req, res) => {
    console.log('req.b: ', req.body);
    const product = new Product ({
        name: req.body.name,
        theme: req.body.theme,
        price: req.body.price,
        size: req.body.size,
        amount: req.body.amount
    });
    try {
        const savedProduct = await product.save();
        res.json(savedProduct);
    }catch (err) {
        res.json({ message:err })
    }
})

配置完成后,再用Postman以form-data格式发送请求,就能正常获取req.body中的数据了。如果后续需要处理文件上传,只需调整multer的存储配置即可。

内容的提问来源于stack exchange,提问作者Lim Jing Png

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:21:29