2017-09-26 194 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

相關問題