我们使用navigator.sendBeacon函数将数据发送到Koa服务器,在该服务器中我们使用bodyparser。
如果我们没有将数据封装到表单中,那么默认情况下,此函数会将数据作为请求有效负载发送。我怎样才能访问Koa服务器上的数据?
示例:
navigator.sendBeacon('http://localhost:3000/cookies/', 'test=payload')服务端请求正文为空。

发布于 2019-06-11 22:03:14
考虑到
koa-bodyparser
json和form解析,
您需要更改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-主体解析器4.2.1。
发布于 2021-05-10 06:26:42
尽管koa不解析request主体,并且由于某些原因您不想使用koa-bodyparser,但是您仍然可以使用原始http从request对象中收集body。
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);
}
});https://stackoverflow.com/questions/53591683
复制相似问题