readstream管道没有关闭

时间:2013-05-06 13:08:15

标签: node.js sax

我使用sax-js来读取大型xml文件。解析器完成后,我无法让程序退出。这是脚本的形状,删除了解析器逻辑。

    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();
    };

0 个答案:

没有答案