3

大きなxmlファイルを読むためにsax-jsを使用しています。パーサーが終了したときにプログラムを終了させることができません。パーサー ロジックを削除したスクリプトの形状を次に示します。

    var fs = require('fs');
    var sax = require('sax');

    var feedFile = 'foo.xml';
    var saxStream = sax.createStream(true)
    .on('opentag', function(node) { // do stuff })
    .on('end', function() {
         console.log("parser end event");
    });

    var options = {
         flags: 'r',
         encoding: 'utf8',
         mode: 0666,
         bufferSize: 1024
    };

    fs.createReadStream(feedFile, options, function(err) {
        throw err;
    })
    .on('end', function() {
        console.log("read stream end event");
    })
    .pipe(saxStream);

すべてが正常に機能します。そしてコンソールはこのようなメッセージを受け取ります

    read stream end event
    parser end event

そして、プロセスは終了するはずです。そうではありません。私は何が欠けていますか?


編集:私が欠けているもの。 リソースがまだ開いているため、ノードを終了できませんでした。誘惑は、どこでも、どこでも process.exit() を呼び出そうとすることです。この場合、私は自分で試してみましたが、うまくいきませんでした。

開いているmongodb接続(mongooseによって管理されている)があるため、スクリプトを終了できませんでした。これは本質的に(詳細ではありませんが)それを修正したものです:

    saxStream.on('end', function() {
        console.log("parser end event");
        mongoose.disconnect();
    };
4

0 に答える 0