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)
捕获流一次才有意义.
您可以使用该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-body或co-body,因为这些也是流捕获实用程序,假设你还没有捕获流.要使请求体可以作为JSON(例如)访问,只需执行以下操作:
this.jsonRequestBody = JSON.parse(this.rawRequestBody);
console.log(typeof this.jsonRequestBody); // "object"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4291 次 |
| 最近记录: |