使用Fetch API提交text/plain数据,后端req.body为空的问题
解决Fetch提交text/plain时后端req.body为空的问题
问题原因
Express 默认的请求体解析逻辑仅支持解析 application/json 和 application/x-www-form-urlencoded 类型的数据,不会处理 text/plain 格式的请求体,因此直接访问 req.body 会得到空对象。
解决方案
根据你的Express版本选择对应的配置方式:
方式1:Express 4.16+版本(内置解析能力)
Express 4.16及以上版本已经内置了原body-parser的功能,直接添加express.text()中间件即可解析text/plain类型数据。
- 全局配置(所有路由生效):
const express = require('express'); const app = express(); // 配置text/plain解析中间件 app.use(express.text()); const router = express.Router(); router.post('/test', (req, res) => { console.log(req.body); // 输出: "this is a test" res.send('OK'); }); app.use(router);
- 单独路由配置(仅目标路由生效):
const express = require('express'); const router = express.Router(); // 只为/test路由添加text解析 router.post('/test', express.text(), (req, res) => { console.log(req.body); res.send('OK'); });
方式2:旧版Express(需手动安装body-parser)
如果你的Express版本低于4.16,需要先安装body-parser依赖:
npm install body-parser
然后使用bodyParser.text()中间件:
const express = require('express'); const bodyParser = require('body-parser'); const router = express.Router(); router.post('/test', bodyParser.text(), (req, res) => { console.log(req.body); res.send('OK'); });
配置完成后,再次发起前端的Fetch请求,后端就能正确获取到text/plain类型的请求体内容了。
内容的提问来源于stack exchange,提问作者Sean.L
相关产品推荐
相关产品推荐

