私は、ファイルアップロードをチャンクで処理するexpressJS Webアプリケーションを作成しています。受信可能なファイルには、処理してオンザフライで検証する必要があるデータが含まれています。ストリーミングと非同期の検証を伴うNodeJS処理ファイルのアップロード
私は以下のようにそれを処理しています:processLine()関数で
module.exports = function(req, res, next) {
logger.info("file converter executing...");
req.on('data',function(chunk){
// Read a line from the chunk
var line = readALine(req, chunk);
while ((line = readALine(req, chunk)) !== null) {
// ignore comment lines and blank lines...
if (line.indexOf("#") === 0 || line.length === 0) continue;
result = processLine(req, line);
}
});
/** EOF: request stream -- move processing to next layer. **/
req.on('end', function() {
console.log("handing control to next middle ware...");
return next();
});
};
を、私は、入力データの各ラインを検証する必要があります。しかし、問題は検証が非同期であることです。なぜなら、もともとはDBにある値をチェックしようとしていますが、Redis Cacheやプログラムの内部キャッシュに遅延ロードされているからです。したがって、検証は非同期です。
私は現在のチャンクの検証を終了するまで、データのチャンクを処理していますが、ストリームからそれ以上のイベントは受信したくありません。
私の質問:
アムI右の一時停止()、履歴書()APIがここに収まると仮定では?だから、非同期検証の約束が終わるまでストリームを一時停止してから再開できますか?それは安全ですか?
私の検証が失敗した場合は、res.send(何らかのエラー)を返すように計画します。リクエストストリーム内の残りのチャンクをすべて適切にクリアするか、それ以上のことを行う必要がありますか?任意の助け
おかげで...
良い答え。もっと探検した後、私は「データ」イベントではなく、プル型の読書をしなければならないと思う。この方法では、データを私にプッシュする代わりに、自分が望むものだけを消費することができます。 –