2016-08-09 16 views
0

私は大きなXMLファイルを解析するためにnodejsのためにxml-streamライブラリを使用します。それはとてもうまくいく。 しかし、XMLストリームイベントのコールバックにRefereceErrorのような問題がある場合、nodejsは私に通知せずに終了するか、エラーをスローすることに注意してください。コールバックでのNodejのエラー処理(xml-stream)

短い例では、次のコードです:

var fs = require('fs'); 
var XmlStream = require('xml-stream'); 

var stream = fs.createReadStream('E:/jdown2/dblp/dblp.xml'); 
var xml = new XmlStream(stream); 


xml.on('endElement: article', function (data) { 
    console.log("article"); // works well 
    var demo = functionThatNotExists(data); 
    console.log("nodejs exit before this console log"); 
}); 

だから私の質問はnodejsがエラー、どこでエラーが発生があったことを私に語ったことを、私はそれを達することができるか、でしょうか?

xml-streamはそれを提供していませんか?通常のコールバック関数で

のように:

errorInCallback("test", function (err,data) { 
    console.log(err, data) 
}); 

function errorInCallback(data, cb) { 
    var demo = functionThatNotExists(data); 
    var err = null; 
    return cb(err, demo) 
} 

のようにすべての作品が期待されるとnodejsはにReferenceErrorに

をスロー誰かがそれを修正する方法を多分私に理由を説明することができますか?

ありがとうございます! errorイベントのハンドラを追加すること

答えて

0

試してみてください。

xml.on('error', function (err) { 
    console.log(err); 
}); 
+0

こんにちは、ご協力いただきありがとうございます。しかし、残念ながら、これはうまくいきません。私はエラーのためにイベントリスナーを追加しました。しかし、その火災や通知しないでください。それはノード – Hansinger

+0

Hmmmを終了するだけです。おそらくあなたはノードプロセスでキャッチされていない例外を聞くことができますか?たぶん問題はxml-streamにないかもしれません。 'process.on( 'uncaughtException'、function(例外){console.log(例外);});' –

0

あなたがxml.onから取得されたデータには存在しない関数を呼び出そうとしていますか?もしそうなら、エラーがそこから来ているので、それを処理する必要があります。

var fs = require('fs'); 
    var XmlStream = require('xml-stream'); 

var stream = fs.createReadStream('E:/jdown2/dblp/dblp.xml'); 
var xml = new XmlStream(stream); 

xml.on('endElement: article', function (data) { 
    console.log("article"); // works well 
    try { 
     var demo = functionThatNotExists(data); 
     if (demo == null) { 
     throw new Error('Something went wrong'); 
     } 
    } 
    catch(e) { 
    console.log(e.name + ": " + e.message); 
    } 

    console.log("nodejs exit before this console log"); 
);