2012-09-11 12 views
5

Ich bin neu in Javascript und Knoten und habe versucht, eine Anwendung mit node.js und Express zu erstellen.Ausnahmebehandlung in node.js und express

Ich habe entsprechende Rückrufe auf Fehler setzen, aber sie sind nicht überall setzen, und manchmal node.js Server nur wegen einer Ausnahme stoppt, der herein kommt.

Es wird empfohlen wurde ‚Emporkömmling‘ zu verwenden oder ‚für immer 'um die node.js immer laufen zu lassen und sie zu starten, egal ob node.js stoppt.

Es scheint Express bietet einen Haken alle für alle Ausnahmen durch die folgende von der Verbindung http://expressjs.com/guide.html#error-handling

app.use(function(err, req, res, next){ 
    console.error(err.stack); 
    res.send(500, 'Something broke!'); 
}); 

Es ist nun für mich arbeiten. Wie auch immer, ich habe irgendwo gelesen, dass ein Fehler wie dieser keine gute Idee ist, da er Nebenwirkungen haben kann und die Variablen in einem inkonsistenten Zustand lassen kann. Das Abfangen einer solchen Ausnahme funktioniert nicht in allen Fällen, und es kann Fälle geben, in denen der Server für eine Ausnahme noch anhalten kann. Ist es wahr?

Meine Fragen sind wahrscheinlich das.

1) Kann die Ausnahmebehandlung wie oben einige Variablen in einem inkonsistenten Zustand hinterlassen? 2) Kann es Ausnahmen geben, die den Server noch stoppen?

Dank & Grüße

Tuco

+0

siehe: http://machadogj.com/2013/4/error-handling-in-nodejs.html – vsync

Antwort

3

1) Ob diese Ausnahmebehandlung Methode einige Variablen in einem inkonsistenten Zustand Ihrer Implementierung verlassen können, hängt von.

Wenn Sie alle Variablen auf die spezifischen Anforderungen und Funktionen beschränken und nicht auf globale oder höhere Variablen wie das globale App-Objekt zugreifen, ist alles in Ordnung. Ungenutzter Speicher wird direkt nach der Ausnahme von Garbage Collector bereinigt.

2) Ja, es ist möglich, dass einige Ausnahmen den Server stoppen. Daher sollten Sie einen globalen Handler für die Behandlung von Ausnahmen für den folgenden Prozess festlegen: http://nodejs.org/api/process.html#process_event_uncaughtexception