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

Node.js中使用Thunder Client提交表单时req.body始终为空

解决Express POST接口返回空对象的问题

核心原因与对应解决方案

1. 请求Content-Type与中间件不匹配

你的代码中express.urlencoded({ extended: true })仅处理application/x-www-form-urlencoded类型的请求体。如果在Thunder Client中勾选了Multipart Form选项,请求会以multipart/form-data格式发送,这个中间件无法解析,导致req.body为空。

解决步骤:

  • 在Thunder Client的POST请求页面切换到「Form」标签
  • 取消「Multipart Form」的勾选(仅当不需要上传文件时)
  • 此时请求会自动使用application/x-www-form-urlencoded类型,中间件能正常解析表单数据

2. 需要处理multipart/form-data类型表单(含文件上传场景)

如果你的表单需要上传文件,必须使用multer中间件解析multipart/form-data格式:

第一步:安装multer

npm install multer

第二步:修改代码

const express = require('express');
const multer = require('multer');
const app = express();

// 解析普通表单(application/x-www-form-urlencoded)
app.use(express.urlencoded({ extended: true }));
// 初始化multer,指定临时文件存储目录(若无需保存文件,可使用memoryStorage)
const upload = multer({ dest: 'uploads/' });

// 使用upload.none()处理不含文件的multipart表单;若含单个文件,改用upload.single('file')
app.post("/", upload.none(), (req, res) => {
    res.status(200).json(req.body);
});

3. 确认中间件挂载顺序

确保express.urlencoded或multer中间件是在所有路由之前挂载的——你的现有代码已经符合要求,但后续新增路由时不要把路由写在中间件之前。

内容的提问来源于stack exchange,提问作者Xenon M. Bird

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:45:39