2016-10-12 3 views
0

次のコードブロックで、パイプデータを記録してJSONStream.parseを失敗させる方法はありますか?パイプ内のパイプデータの表示エラー

それが吹くと、現在、私は、エラーメッセージのこの種が、無効なUTF-8文字が何であるかにいないコンテキストを取得するので、私は聞いて
data.pipe(JSONStream.parse('*')) 
.on('error',() => { 
    // here I'd like to see the data causing JOSONStream.parse to blow up 
    reject("Error parsing the json!"); 
}) 
.pipe(objectStream); 

.on('error', (data) => {...よう

Error: Invalid JSON (Invalid UTF-8 character at position 2397 in state STRING1) 
     at Parser.proto.write (/var/www/data-site/pop-service/node_modules/JSONStream/node_modules/jsonparse/jsonparse.js:120:31) 
     at Stream.<anonymous> (/var/www/data-site/pop-service/node_modules/JSONStream/index.js:23:12) 
     at Stream.stream.write (/var/www/data-site/pop-service/node_modules/JSONStream/node_modules/through/index.js:26:11) 
     at IncomingMessage.ondata (_stream_readable.js:536:20) 
     at emitOne (events.js:82:20) 
     at IncomingMessage.emit (events.js:169:7) 
     at readableAddChunk (_stream_readable.js:153:18) 
     at IncomingMessage.Readable.push (_stream_readable.js:111:10) 
     at HTTPParser.parserOnBody (_http_common.js:124:22) 
     at TLSSocket.socketOnData (_http_client.js:320:20) 

何かがしていないようですが仕事@drinchevからの回答を使用して

ソリューション

//save the last chunk so that we can log it in case of parsing error 
    let lastRetrievedChunk = ''; 
    data.on('data', (dd: any) => { 
     lastRetrievedChunk = dd.toString(); 
    }); 

    let jsonParser = JSONStream.parse('*'); 
    jsonParser.on('error', (err: any) => { 
     reject(err.stack + ' lastchunk = ' + lastRetrievedChunk); 
    }); 
    data.pipe(jsonParser).pipe(objectStream); 

答えて

0

イベントドリブンプロセスなので実際には機能しません。

あなたはまた、パイプで連結をログに記録ストリームを作るためにあなたを助けることができるthrough2のようないくつかのライブラリを使用することができ、変数にデータを格納し、任意の時点でエラー

var someString = '*'; 

data.pipe(JSONStream.parse(someString)) 
    .on('error',() => { 
     console.log(someString); 
     reject("Error parsing the json!"); 
    }) 
    .pipe(objectStream); 

に渡ししようとすることができますデータ。

関連する問題