如何在Koa网络框架中访问“请求有效负载”?

时间:2018-12-03 10:21:55

标签: node.js koa koa-bodyparser

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

如果我们没有将数据包装到表单中,则默认情况下,此函数将数据作为请求有效负载发送。如何在Koa服务器上访问此数据?

示例-

navigator.sendBeacon('http://localhost:3000/cookies/', 'test=payload')

在服务器上,请求正文为空。

enter image description here

2 个答案:

答案 0 :(得分:0)

考虑到这一点

  1. Koa不会解析请求正文,因此您需要使用koa-bodyparserkoa-body

  2. koa-bodyparser默认仅启用jsonform解析,

  3. 很明显navigator.sendBeaconyour screenshot设置Content-Typetext

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

示例:

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-bodyparser 4.2.1

答案 1 :(得分:0)

尽管 koa 不解析 request 主体,并且出于某种原因您不想使用 koa-bodyparser,但您仍然可以使用原始 http 来收集 { {1}} 来自 body 对象。

request