Knoten -, Express -, Domänen, nicht abgefangene Ausnahmen - immer noch verloren
Habe ich gelesen, für Stunden auf die Ausnahmebehandlung in Knoten. Ich verstehe die Nachteile der Verwendung von uncaughtException
ich verstehen, dass die Stilllegung der Prozess ist gut für die Verhinderung einer "unbekannten Zustand", wo "alles kann passieren". Ich verstehe, dass die Verwendung domains ist der Weg zu gehen, und ich verstehe, wie Sie richtig zu implementieren, domains, speziell Explizite Bindung...
...aber ich bin immer noch nicht bekommen keine Ergebnisse für nur grundlegende Fehlerbehandlung.
Ich würde gerne in der Lage, nur fangen keine nicht abgefangene Ausnahmen für die Zwecke der Protokollierung. Ich bin nicht dagegen, die Tötung der Prozess oder irgendetwas anderes als "unerwünscht". Ich will einfach nur ein log.
Ich fühle mich nicht wie ich haben sollte, wickeln Sie alles in einen try/catch-oder einige-Bibliothek zu emit
Fehler... bitte korrigiert mich wenn ich falsch bin, und ich werde ändern Sie meine Wege.
Ich bin mit Node und Express und ich habe folgenden einfachen code:
var express = require('express');
var domain = require('domain');
var serverDomain = domain.create();
serverDomain.on('error', function(err) {
console.log("SERVER DOMAIN ERROR: " + err.message);
});
serverDomain.run(function() {
var app = express();
app.get('/testing', function() {
app.nonExistent.call(); //this throws an error
});
var server = app.listen(8000, function() {
console.log('Listening on port %d', server.address().port);
});
});
Den Fehler in der Konsole, sondern die Konsole erhält nie den "SERVER-DOMAIN ERROR..." angezeigt. Ich habe auch versucht, das einwickeln der Anfrage - /Antwort-in Ihrer eigenen Domäne als auch, ohne Erfolg. Umso enttäuschender ist die Tatsache, dass die Verwendung des folgenden nicht funktionieren:
process.on('uncaughtException', function(err) {
console.log('uncaughtException caught the error');
});
Mache ich etwas falsch? Wo gehe ich von hier? Wie kann ich fangen die oben genannten Fehler?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie connect-Domäne.
Das problem ist, dass die Ausnahme passiert während der Verbindung das routing, das sowohl einen try/catch-block, um seine Ausführung, als auch als Standard-Fehler-handler, die druckt stack-trace-Daten bei der Ausführung in einer nicht-Produktions-Modus. Da die Ausnahme behandelt wird im inneren des Express, es erreicht nie Ihre äußere Schicht für die domains zu behandeln.
Hier ist ein Beispiel, warum die Verwendung connect domain-Paket anstelle der domain.
http://masashi-k.blogspot.com/2012/12/express3-global-error-handling-domain.html
Dies geschieht, weil Express behandelt, indem Sie selbst die Fehler, die möglicherweise angezeigt werden und auf diese Weise vereinfacht Ihre Arbeit. Sehen Express-Ratgeber für die Fehlerbehandlung. Sie sollten die folgende Struktur zu behandeln, die Fehler, die möglicherweise angezeigt werden: