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