遇到一个egg/koa中间件bodyparser的问题
// postman 拷贝出来的。我需求就是post一个纯文本
var data = "我是一个普通文字";
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("POST", "http://localhost:7001/log");
xhr.setRequestHeader("Content-Type", "text/plain");
xhr.setRequestHeader("Cache-Control", "no-cache");
xhr.setRequestHeader("Postman-Token", "7ca0dc9e-39938");
xhr.send(data);
// eggjs里我这样写,然后也尝试了rawBody也拿不到。
async index() {
const text = this.ctx.request.body;
}
bodyparser 配置成
{
enable:true,
}
依然拿不到
4 回复
eggjs直接用的koa的中间件bodyparser 源码的42行
// force co-body return raw body
opts.returnRawBody = true;
// 强行设了一个值。
打开了一个配置。 对应的是 co-body的41行 对应取值
const res = await parseBody(ctx);
ctx.request.body = 'parsed' in res ? res.parsed : {};
if (ctx.request.rawBody === undefined) ctx.request.rawBody = res.raw;// 这里可以看到,尝试在给rawBody赋值。
看完源码之后,我仍然无法在this.ctx.request.rawBody里拿到我想要的东西。
那么最后的问题就是,修改 enableTypes的值为[ ‘json’, ‘form’, ‘text’ ] bodyparser 配置成 { enable:true, enableTypes: [ ‘json’, ‘form’, ‘text’ ], } 结论:没生效。一定是我哪里搞错了~