访问koa.js中请求的原始主体

Iva*_*nov 6 javascript node.js koa

我用io.js和创建了一个API koa.js.

作为我正在使用的身体解析器中间件koa-body,它反过来使用co-body.

在我的一个API端点上,我正在接收POST请求,我需要访问请求的原始主体,因为我需要对其进行编码以验证请求是否有效.

有没有办法访问请求的原始主体?我试图用raw-body中间件,但如果我用它我打电话之前koa-body,将co-body用于koa-body休息.如果我在koa-body它不起作用后使用它.

   app.use(function*(next){
    let rawRequestBody = yield rawBody(this.req);
    this.rawRequestBody = rawRequestBody;

    yield next;
  });
Run Code Online (Sandbox Code Playgroud)

编辑:

我认为我找到了解决方法,但我不知道这是否是最好的解决方案.我认为@greim的答案可能是解决这个问题的更好方法.

我在使用之前添加了以下代码koa-body:

app.use(function *(next) {

    let url = this.req.url;

    if(this.req.method == 'POST') {
      let that = this;
      this.req.rawBody = '';

      this.req.on('data', function(chunk) {
        that.req.rawBody += chunk;
      });
    }

    yield next;
  });
Run Code Online (Sandbox Code Playgroud)

gre*_*eim 6

捕获流一次才有意义.

您可以使用该raw-body实用程序将请求主体捕获为字符串或缓冲区(我假设这是"raw"主体的意思),然后保留对它的引用,如您自己的代码所示,这样:

let rawRequestBody = yield rawBody(this.req);
this.rawRequestBody = rawRequestBody;
console.log(typeof this.rawRequestBody); // "string"
Run Code Online (Sandbox Code Playgroud)

一旦你这样做,不要也使用koa-bodyco-body,因为这些也是流捕获实用程序,假设你还没有捕获流.要使请求体可以作为JSON(例如)访问,只需执行以下操作:

this.jsonRequestBody = JSON.parse(this.rawRequestBody);
console.log(typeof this.jsonRequestBody); // "object"
Run Code Online (Sandbox Code Playgroud)