2017-09-26 152 views
0

我正在使用https://github.com/request/request发出HTTP请求,我想接收JSON。响应会很严重,所以我想用流方式来处理响应。但是,我调用的API返回'text/plain'状态> = 400,这意味着我的JSONStream将bork。代码:处理状态> = 400在流式node.js请求http客户端

req = request.get({url: data_url}); 
    req.pipe(require('JSONStream').parse([true])) 
    .pipe(require('stream-batch')({maxItems: 1000})) 
    .on('data', callback) 
    .on('end', done); 

错误:

Invalid JSON (Unexpected "I" at position 0 in state STOP) 

(“A”,如“内部服务器错误”。)看来要求不排放为完成所以加入req.on('error', (err) => ...)不请求“错误”事件触发。我可以添加

req.on('response', function(res) { 
    if(res.statusCode >= 400) { ... } 
}) 

但是,我似乎无法得到正文中的错误消息。

我该如何获得错误信息,有意义地登录并中断处理?

回答

0

由于传递给response事件的说法是可流,以及,你可以创建它的处理器里面的流水线:

req.on('response', function(res) { 
    if (res.statusCode >= 400) { 
    let chunks = []; 
    res.on('data', c => chunks.push(c)) 
     .on('end',() => { 
     console.log('error', Buffer.concat(chunks).toString()); 
     }); 
    } else { 
    res.pipe(require('JSONStream').parse([true])) 
     .pipe(require('stream-batch')({maxItems: 1000})) 
     .on('data', callback) 
     .on('end', done); 
    } 
}) 
+0

噢噢噢,曾经说过,这么明显!谢谢。 – Bittrance

相关问题