我们正在使用navigator.sendBeacon函数将数据发送到使用bodyparser的Koa服务器。
如果我们没有将数据包装到表单中,则默认情况下,此函数将数据作为请求有效负载发送。如何在Koa服务器上访问此数据?
示例-
navigator.sendBeacon('http://localhost:3000/cookies/', 'test=payload')
在服务器上,请求正文为空。
答案 0 :(得分:0)
考虑到这一点
Koa不会解析请求正文,因此您需要使用koa-bodyparser或koa-body,
koa-bodyparser
默认仅启用json
和form
解析,
很明显navigator.sendBeacon
从your screenshot设置Content-Type
为text
,
您需要更改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