2017-08-29 11 views
1

htt38経由で.ndjsonファイルをロードしています。私はファイルの100行を読んだ後に閉じたいです。Node.jsでhttpsストリームを閉じる方法

const amount = 100; 
    https.get(url, (res) => { 
    var { statusCode } = res; 

    if (statusCode !== 200) { 
     throw new Error(`Request Failed.\n Status Code: ${statusCode}`); 
    } 

    res.setEncoding('utf8'); 
    let rows = []; 
    res 
     .pipe(ndjson.parse()) 
     .on('data', function (obj) { 
     rows.push(obj); 
     if (rows.length === amount) { 
      this.end(); 
     } 
     }) 
     .on('end',() => { 
     resolve(rows); 
     }); 
    }).on('error', (e) => { 
    throw new Error(e.message); 
    }); 

しかし、私は、ストリームクローズしようとしているすべての方法は、同じエラーメッセージが表示されます。

Error: Could not parse row {"username"... 
    at DestroyableTransform.parseRow [as mapper] (C:\Users\thoma\Documents\GitHub\test\node_modules\ndjson\index.js:19:28) 
    at DestroyableTransform.flush [as _flush] (C:\Users\thoma\Documents\GitHub\test\node_modules\split2\index.js:44:21) 
    at DestroyableTransform.<anonymous> (C:\Users\thoma\Documents\GitHub\test\node_modules\readable-stream\lib\_stream_transform.js:138:49) 
    at Object.onceWrapper (events.js:314:30) 
    at emitNone (events.js:105:13) 
    at DestroyableTransform.emit (events.js:207:7) 
    at prefinish (C:\Users\thoma\Documents\GitHub\test\node_modules\readable-stream\lib\_stream_writable.js:596:14) 
    at finishMaybe (C:\Users\thoma\Documents\GitHub\test\node_modules\readable-stream\lib\_stream_writable.js:604:5) 
    at afterWrite (C:\Users\thoma\Documents\GitHub\test\node_modules\readable-stream\lib\_stream_writable.js:470:3) 
    at _combinedTickCallback (internal/process/next_tick.js:144:20) 

そして、強制的に閉じられていないとき、それはndjsonに関連していないので、ストリームは、正常に動作しますファイル。要求の途中でストリームを閉じることは可能ですか?

  1. 接続を閉じるには、ヘッダを送信します:this.set("Connection", "close")ストリームの感謝を終了

this.end()に私は最適な1かわからない

答えて

0

は、いくつかのソリューションがあります。

あなたの例では、thisの問題があります(このリンクをご覧ください)。次のコードを試してください:

res 
    .pipe(ndjson.parse()) 
    .on('data', obj => { 
    rows.push(obj); 
    if (rows.length === amount) { 
     this.end(); 
    } 
    }) 
    .on('end',() => { 
    resolve(rows); 
    }); 
関連する問題