首页 > 解决方案 > 如何在 Koa 网络框架中访问“请求有效负载”?

问题描述

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

如果我们没有将数据包装成表单,那么默认情况下此函数将数据作为请求负载发送。我怎样才能在 Koa 服务器上访问这些数据?

例子 -

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

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

在此处输入图像描述

标签: node.jskoakoa-bodyparser

解决方案


考虑到

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

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

  3. 您的屏幕截图中,很明显将navigator.sendBeacon设置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);

经测试

考阿2.7.0

koa-bodyparser 4.2.1


推荐阅读