遇到一个egg/koa中间件bodyparser的问题
发布于 7 小时前 作者 wbget 110 次浏览 最后一次编辑是 6 小时前 来自 问答
// 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 回复

我的需求是这样,我就是要直接使用post上来的数据,自己处理,所以用body parser本来就不是能满足我需求的东西。 读源码了解到co-body的做法,于是从rawbody下手,先找配置看能不能解决。

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里拿到我想要的东西。

那么一定是还没有找对地方。 另一个影响 这里发现一个叫做enableText的值。 仔细看源码 原来还有一个设置,默认是只解析form和json的,text是没的。

那么最后的问题就是,修改 enableTypes的值为[ ‘json’, ‘form’, ‘text’ ] bodyparser 配置成 { enable:true, enableTypes: [ ‘json’, ‘form’, ‘text’ ], } 结论:没生效。一定是我哪里搞错了~

回到顶部