express
を使用しています。req
をリモートサーバーにパイプしてパイプして結果をパイプに戻そうとしていますクライアント:res
うまく動いていますが、res
がconnect-timeout
というアクションで終了し、write after end
というエラーが発生することがあります。私は、ログに次のように表示さnode.jsパイプがリモートサーバーに接続され、resに戻る:res終了後にパイプをresに分割する方法
var onErrorA = function (err) { console.log('error piping to destination:', err); };
var onErrorB = function (err) { console.log('error piping to res:', err); };
var onEndA = function() { console.log('pipe to destination ended'); };
var onEndB = function() { console.log('pipe to res ended'); };
var destination = request(destinationUrl);
req.pipe(destination)
.on('error', onErrorA)
.on('end', onEndA)
.pipe(res)
.on('error', onErrorB)
.on('end', onEndB);
:
error piping to res: Error: write after end
pipe to destination ended
私は場合
私のコードは次の行(私はデバッグの目的のためにログを無理しています)に沿って、現在あります何が起こっているのかを確認したら、res
が終了した(タイムアウトすると)パイプラインを中断する(res
への書き込みを停止する)のですか?
私は(req.timedout
がconnect-timeout
によってtrue
に設定されている場合)res
が終了したときに試してみてキャッチするために、以下の線に沿って何かをしようとしました:
var destination = request(destinationUrl);
var readable = req.pipe(destination);
var onData = function (chunk) {
if (req.timedout) {
// prevent any further writing to res by unpiping it...
readable.unpipe(res);
}
};
// https://nodejs.org/api/stream.html#stream_event_data
readable.on('data', onData);
readable.pipe(res);
しかし、私はちょうど次のエラーを取得します:
TypeError: readable.unpipe is not a function
はなぜreadable
の機能unpipe
ではないでしょうか?
私が欲しいものを達成する方法に関する提案はありますか?