如何获取Content-Type为text/plain的API请求体内容?
解决Content-Type为text/plain时获取API请求体的问题
默认情况下,Express的express.json()中间件仅解析application/json类型的请求体,不会处理text/plain格式,这就是你用req.body获取不到内容的原因。以下是具体解决方法:
步骤1:添加text/plain解析中间件
在Express应用中添加express.text()中间件,用于解析文本类型的请求体,确保该中间件在路由定义之前配置:
const express = require('express'); const app = express(); // 解析text/plain类型的请求体 app.use(express.text({ type: 'text/plain' })); // 你的API路由 app.get('/update-digital-payment-status', (req, res) => { // 现在可以通过req.body获取到文本格式的请求体内容 console.log('请求体内容:', req.body); // 后续业务逻辑处理 res.status(200).send('请求已接收'); }); app.listen(3010, () => { console.log('服务器运行在端口3010'); });
步骤2:(可选)规范请求方法
虽然部分服务器支持GET请求携带请求体,但HTTP规范中GET请求通常不包含请求体,建议将请求方法改为POST,对应的curl命令调整为:
curl \ --location \ --request POST \ --header 'X-Vymo-Auth-Token: XXXXXXXXXXXXX3s' \ --header 'auth-key: XXXXXXXXXXXXX3s' \ --header 'client: abc' \ --header 'Content-Type: text/plain' \ --data 'ABCD|123456789|MSBI0412001668|NA|00000094.00|SBI|22270726|NA|INR|NA|NA|NA|NA|29-05- 201316:08:56|0300|NA|XYZ|NA|NA|NA|NA|BoKDXlJ5j121248|NA|NA|NA|3734835005' \ 'http://localhost:3010/update-digital-payment-status'
注意事项
- 中间件的加载顺序至关重要,
express.text()必须在所有需要处理文本请求体的路由之前配置 - 如果需要同时支持JSON和文本格式的请求体,可以同时添加
express.json()和express.text()中间件
内容的提问来源于stack exchange,提问作者Aakarshit
相关产品推荐
相关产品推荐

