首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Koa web-framework中访问“请求负载”?

如何在Koa web-framework中访问“请求负载”?
EN

Stack Overflow用户
提问于 2018-12-03 18:21:55
回答 2查看 1.3K关注 0票数 3

我们使用navigator.sendBeacon函数将数据发送到Koa服务器,在该服务器中我们使用bodyparser。

如果我们没有将数据封装到表单中,那么默认情况下,此函数会将数据作为请求有效负载发送。我怎样才能访问Koa服务器上的数据?

示例:

代码语言:javascript
复制
navigator.sendBeacon('http://localhost:3000/cookies/', 'test=payload')

服务端请求正文为空。

EN

回答 2

Stack Overflow用户

发布于 2019-06-11 22:03:14

考虑到

  • koa-bodyparser

  • Koa不解析请求体,因此您需要使用koa-bodyparserkoa-body,默认情况下只启用jsonform解析,

  • 来自your screenshot,很明显,将D13设置为D14,H215设置为G216。

您需要更改Koa服务器代码,以便它能够解析text数据。

示例:

代码语言:javascript
复制
const Koa = require('koa'),
  bodyParser = require('koa-bodyparser'),
  app = (module.exports = new Koa());

app.use(bodyParser({ enableTypes: ['json', 'text'] }));

app.use(async (ctx) => {
  // ctx.request.body should contain the parsed data.
  console.log('Received data:', ctx.request.body);
  ctx.body = ctx.request.body;
});

if (!module.parent) app.listen(3000);

测试:

koa 2.7.0

koa-主体解析器4.2.1

票数 1
EN

Stack Overflow用户

发布于 2021-05-10 06:26:42

尽管koa不解析request主体,并且由于某些原因您不想使用koa-bodyparser,但是您仍然可以使用原始httprequest对象中收集body

代码语言:javascript
复制
app.use(async (ctx) => {  
  try {
    // notice that I'm wrapping event emitter in a `promise`
    ctx.body = await new Promise((resolve, reject) => {
        let data = '';
        // this is same as your raw `http.request.on('data', () => ()`
        ctx.req.on('data', chunk => {
          data += chunk;
        };
        ctx.req.on('error', err => {
          reject(err);
        };
        ctx.req.on('end', () => {
          resolve(data);
        };
      });
  } catch (e) {
    console.error(e);
  }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53591683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档