egg.js 如何获取request.body?

发布于 2022-09-11 23:38:11 字数 709 浏览 15 评论 0

最近打算使用egg.js做一个持续部署的工具,需要用到webhook,但是在校验的过程中,官方给了一个demo,是用express做的就可以通过验证,egg.js就无法通过验证,
官方demo如下

const express = require('express');
const bodyParser = require('body-parser');
const crypto = require('crypto');

const app = express();
app.use(bodyParser.text({ type: '*/*' }));
// ...

我找到了两个差别在于里面有一个字段

使用express的body-parser获取到的是:

"html_url":"\u003ca href\u003d\u0027https://coding.net/u/TEST/p/game_hr\u0027 target\u003d\u0027_blank\u0027\u003egame_hr\u003c/a\u003e"

使用egg获取到的是:

"html_url":"<a href='https://coding.net/u/TEST/p/game_hr' target='_blank'>game_hr</a>"

请问egg.js如何获取express那样的格式?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

趴在窗边数星星i 2022-09-18 23:38:11

egg.js 用ctx.request.rawBody(没有解析过的body,字符串类型)获取body值,不用ctx.request.body, 等同于express里的req.body(配置是bodyParser.text({ type: '*/*' }))

以下是分析历程:

\unnnn 十六进制代码 nnnn 表示的 Unicode 字符( n 是 0 到 F 中的一个十六进制数字)

\u这个是Unicode转义字符。上面两段用字符串表示在js里是相等的。如图:

clipboard.png

既然说是不一样的,那就怀疑你取的内容是不是转义过的(即'\\u003c' 在控制台输出后显示的是 \u003c

所以有一点要你自己明确 “使用express的body-parser获取到的是:...” 这里你是怎么获取的,以下我写的案例,同一个body我可以展现出三个不一样的输出:
案例代码:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.text({ type: '*/*' }));
const port = 3000

app.post('/', (req, res) => {
  console.log(1, req.body)
  console.log(req.body)
  console.log(JSON.parse(req.body))
  res.send(req.body)
})

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

postman 测试接口
image.png

输出:

image.png

个人猜测:你express取的是第二种结果,egg.js你取的是第三种结果(egg.js 自动会将body转为json对象,即typeof ctx.request.body === object)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文