クライアントが私の応答を受信するのを妨げている原因が見つかりません。すべてのコードが機能し、コマンド ラインには応答が送信されていることが示されますが、クライアントはそれを取得しません。req.destroy または Connection close ヘッダーで強制できます。それを妨げているものを確認する方法はありますか?
req を busboy にパイプしてから、ファイルを busboy からストリームにパイプしてファイルを検証しています。問題は、これが完了したら、ストリームを関数に送信する必要があることです。これは基本的に私が今やっている方法ですが、エラーがあるとハングします。また、消費していないため、highWaterMark を上げる必要があります。
validateCSV
.on('finish', () => {
datasetService.import(validateCSV, dataset, (er) => {
....
})
}
.on('error', (err) => {
//The res never sends
res.status(500).json(err).end();
}
Transform ストリームからエラーが発生しない限り、これは正常に機能します。データイベントでそれを消費する必要がありますか? 関数を使用する前にストリームをバッファリングする必要がありますか?
エラー後のストリームは次のようになります。
ValidateCSV {
_readableState:
ReadableState {
objectMode: true,
highWaterMark: 1000000,
buffer: [],
length: 0,
pipes: null,
pipesCount: 0,
flowing: null,
ended: false,
endEmitted: false,
reading: false,
sync: false,
needReadable: true,
emittedReadable: false,
readableListening: false,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: false,
decoder: null,
encoding: null },
readable: true,
domain: null,
_events:
{ end: { [Function: g] listener: [Function: onend] },
prefinish: { [Function: g] listener: [Function] },
finish: [ [Function] ],
error: [ [Function] ] },
_eventsCount: 4,
_maxListeners: undefined,
_writableState:
WritableState {
objectMode: true,
highWaterMark: 1000000,
needDrain: false,
ending: false,
ended: false,
finished: false,
decodeStrings: true,
defaultEncoding: 'utf8',
length: 1,
writing: true,
corked: 0,
sync: true,
bufferProcessing: false,
onwrite: [Function],
writecb: [Function: nop],
writelen: 1,
bufferedRequest: null,
lastBufferedRequest: null,
pendingcb: 1,
prefinished: false,
errorEmitted: false },
writable: true,
allowHalfOpen: true,
_transformState:
TransformState {
afterTransform: [Function],
needTransfor`enter code here`m: false,
transforming: true,
writecb: [Function],
writechunk: <Buffer 50 6f 6c 69 63 79 54 79 70 65 2c 4e 61 6d 65 2c 50 72 6f 70 41 64 64 72 65 73 73 32 2c 50 72 6f 70 43 69 74 79 2c 50 72 6f 70 5a 69 70 2c 50 6f 6c 69 ... >,
writeencoding: 'buffer' } }