如何解析请求正文?

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 如果这回答了你的问题,你能把它标记为最佳答案吗?

以上是关于如何解析请求正文?的主要内容,如果未能解决你的问题,请参考以下文章

如何在请求正文中设置对象名称以在 Ios 中解析 json

当 HTTP 请求返回状态 401 时,如何在 Java 中解析响应正文

无法解析请求正文。确保请求正文与指定的内容类型匹配:应用程序/json [重复]

如何在 Spring 'HandlerMethodArgumentResolver' 中多次读取请求正文?

无法解析请求正文

请求不使用正文解析器显示数据