2016-08-09 11 views
0

Ich benutze die XML-Stream-Bibliothek für Nodejs, um eine große XML-Datei zu analysieren. Das funktioniert sehr gut. Aber ich stelle fest, dass, wenn es ein Problem wie ein ReferenceError im Rückruf eines xml-stream Ereignisses gibt, Nodejs nur beendet, ohne mich zu benachrichtigen oder einen Fehler zu werfen.Nodejs Fehlerbehandlung im Callback (xml-stream)

Ein kurzes Beispiel dafür ist der folgende Code:

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

Also meine Frage ist, wie kann ich es erreichen, dass NodeJS mir sagt, dass es einen Fehler gab und wo der Fehler aufgetreten?

Oder liefert xml-stream das nicht?

In einer normalen Callback-Funktion wie:

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

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

alle Arbeiten wie erwartet und NodeJS wirft ein Reference

jemand Hat kann mir den Grund erklären und vielleicht, wie das zu beheben?

Vielen Dank im Voraus!

Antwort

0

Versuchen einen Handler für das error Ereignis hinzufügen:

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

Hallo, vielen Dank für Ihre Hilfe. Aber leider funktioniert das nicht. Ich habe den Ereignis-Listener für den Fehler hinzugefügt. Aber es ist nicht Feuer oder notify. Es beendet nur Knoten – Hansinger

+0

Hmmm .. vielleicht können Sie versuchen, für nicht abgefangene Ausnahme im Knotenprozess zu hören? Vielleicht ist das Problem nicht in XML-Stream. 'process.on ('uncaughtException', Funktion (Ausnahme) {console.log (Ausnahme);});' –

0

Sind Sie versuchen, eine Funktion aufzurufen, die nicht mit den Daten aus xml.on Sie werden immer existiert? Wenn ja, kommt der Fehler von dort und dann sollten Sie damit umgehen.

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"); 
); 
Verwandte Themen