誰かが私に次の行動の理由を説明してもらえますか?
nodejs / express Webサーバーがあり、次のコードを含む投稿ルートの1つがあるとします。
req.on('data', function() { console.log('data arrived'); })
このコードは期待どおりに機能し、呼び出されたときに「データが到着しました」というメッセージをコンソールに書き込みます。ただし、次のコードは次のとおりです。
setTimeout(function() { req.on('data', function() { console.log('data arrived'); }) }, 1000);
同じ状況にもかかわらず、何も印刷されません。短時間後にイベントをサブスクライブすると、リクエストオブジェクトストリームはどうなりますか?
これが必要な理由は、サーバーに大きなファイルをアップロードしたいからです。POSTリクエストが届いたら、データベースエントリを作成し、それにデータをパイプする必要があります。潜在的なサイズのためにデータチャンクをメモリに保存できませんが、データベースコールバックまたはコールバックからのリクエストオブジェクトのデータを取得できません。
この問題を解決する方法を知っていますか?前もって感謝します!
アップデート
次のコードはまだ機能しません。
req.pause();
setTimeout(function() {
req.on('data', function(data) { console.log('data arrived'); })
req.resume();
}, 1000);
UPDATE2
最終的な目標は、次のようなsgを実行することです。
req.pause();
doSometingAsync(function(result) {
req.on('data', function(data) { doSomethingWithData(data, result) });
req.resume();
});
、しかしこれはうまくいかないようです...
更新3
これにより、他に何もなしで単一の「経過」が発生します。
req.pause()
setTimeout () ->
console.log 'elapsed'
req.on 'error', (error) -> console.log error
req.on 'data', (data) -> console.log 'in data'
req.on 'end', () -> console.log 'end'
req.resume()
, 2000