如何解析请求正文?
Posted
技术标签:
【中文标题】如何解析请求正文?【英文标题】:How to parse request body? 【发布时间】:2021-11-12 06:01:18 【问题描述】:const express = require('express')
const cors = require('cors')
const app = express()
const PORT = process.env.PORT || 3000;
app.use(cors())
app.use(express.json())
app.use(express.urlencoded( extended: true ))
app.all('/hello/', function (req, res, next)
res.json(
'message': 'test',
'x-result': req.headers['x-test'],
'x-body': req.body
)
)
app.listen(PORT, function ()
console.log('CORS-enabled web server listening on port 3000')
)
请求:
curl 'http://127.0.0.1:3000/hello/' -d 'it is body' -H 'x-test: test'
我想得到这个:
"message":"test", "x-result":"test", "x-body":"它是正文"
但是我得到了这个:
"message":"test","x-result":"test","x-body":"it is body":""
为什么以及如何做正确的事?
【问题讨论】:
这能回答你的问题吗? How to force parse request body as plain text instead of json in Express? @tbking bodyparser 已弃用; app.use(express.text()) app.use(express.json()) - 不工作,只有 app.use(express.urlencoded( extended: true )) 得到了这个身体;安装后纯文本显示 - 找不到模块“plainTextParser” 【参考方案1】:您应该发送正确的内容类型,在您的情况下是 text/plain
。
curl 'http://127.0.0.1:3000/hello/' -H 'content-type: text/plain;' -d 'it is body' -H 'x-test: test'
除了正确的内容类型,您还需要在应用程序中使用express.text()
。
app.use(express.text())
【讨论】:
我可以将默认请求内容类型设置为 'text/plain' 以省略“-H 'content-type: text/plain;'”吗? 如果你只使用express.text()
,而不使用其他类型,Express 会将请求解析为text/plain
,而没有content-type
标头
@aaltw 如果这回答了你的问题,你能把它标记为最佳答案吗?以上是关于如何解析请求正文?的主要内容,如果未能解决你的问题,请参考以下文章
当 HTTP 请求返回状态 401 时,如何在 Java 中解析响应正文
无法解析请求正文。确保请求正文与指定的内容类型匹配:应用程序/json [重复]