我已经使用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;
});
编辑:
我认为我找到了一种解决方法,但是我不知道这是否是最佳解决方案。我认为@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;
});
只捕获一次流才有意义。
您可以使用
raw-body
实用程序将请求主体捕获为字符串或缓冲区(我假设这是“原始”主体的意思),然后保留对它的引用,如您自己的代码所示,例如:一旦这样做,就不要再使用
koa-body
或co-body
,因为它们也是流捕获实用程序,它们假定您尚未捕获流。要使请求正文可作为JSON访问(例如),只需执行以下操作: