2016-06-11 11 views
0

Wie erhalten Sie schöne Fehlermeldungen an Kunden in Express?Übergeben von Fehlern an den Client in Express

app.use(errorHandler); 

function errorHandler(err, req, res, next) { 
    res.send(err); 
} 

app.post('/login', usernameIsValid, pwdIsValid, createToken); 

In usernameIsValid erstelle ich eine new Error mit einer Nachricht und den Status und next(err) nennen. Nun, dies umgeht pwdIsValid und createToken wie es sollte ABER die seltsame Sache ist mein FehlerHandler protokolliert den Fehler ohne console.log. Verwende ich den Standard-Fehlerhandler in Express irgendwo? Wie schalte ich es aus? Ich habe sowohl die Produktion als auch die Entwicklung für NODE_ENV versucht.

Auf dem Client xhr.responseText ist meine error.message + was aussieht wie ein Stack-Trace? Ich habe sogar versucht, nur eine Fehlermeldung zu senden, aber es sieht genauso aus.

Eine Möglichkeit, mit dieser Unordnung umzugehen, besteht darin, jede Middleware (falls ein Fehler auftritt) eine Fehlerzeichenfolge wie req.data.err = "invalid username" zu erstellen und dann sicherzustellen, dass jede folgende Middleware req.data.err prüft, ob die Zeichenfolge vorhanden ist. Aber diese höllisch langweilig ist> _ <

Antwort

0

Aus der ausdrücklichen Dokumentation site

Wenn Sie einen Fehler zum nächsten() übergeben und Sie behandeln es nicht in einer Fehlerbehandlungsroutine, wird es durch den eingebauten behandelt werden -in Fehlerbehandlung; Der Fehler wird mit dem Stack-Trace in den Client geschrieben. Der Stack-Trace ist nicht in der Produktionsumgebung enthalten.

Wenn Sie also den StackTrace vermeiden möchten, müssen Sie nur Ihre Anwendung mit dem NODE_ENV-Set zur Produktion ausführen.

Führen Sie Anwendung wie folgt:

$ NODE_ENV=production node file.js 
+0

NODE_ENV = Produktion hilft nicht. Ich habe es versucht. –

0

ich es gelöst. Sie müssen den Fehlerhandler app.use(errorHandler)nach allen anderen Routen zuletzt anwenden. Dies deaktiviert den integrierten Fehlerhandler. Jetzt können Sie dem Client hübsche Fehlermeldungen übermitteln.

Lesen Sie mehr here.

bearbeiten:process.env.NODE_ENV spielt keine Rolle.

Verwandte Themen