Protokollierung aller Anfragen in Knoten.js/Express
In meinem kleinen node.js Anwendung, Verwendung express, ich wollte melden alle eingehenden Anfragen, so landete ich mit diesem:
var bodyParser = require('body-parser');
module.exports = function(app) {
app.set("port", 50001);
app.set("json spaces", 2);
app.use(bodyParser.json());
app.use(function (error, req, res, next) {
app.logger.info("received from "+req.get("X-Forwarded-For")+" : "+req.method+" "+req.originalUrl+" (Authorization: "+req.get("Authorization")+")");
//does not work if json is malformed
//app.logger.info("content :"+JSON.stringify(req.body));
if (error /*instanceof SyntaxError*/) {
res.status(400);
app.logger.error(error);
res.json({ error:{msg: error.message}});
} else {
next();
}
});
app.use(app.auth.initialize());
};
Leider bekomme ich nur die Protokolle über die app.logger.info
Linie, wenn es ein Fehler ist (in meinem Fall eine fehlerhafte JSON-string in den Körper). Was vermisse ich hier?
InformationsquelleAutor Julien | 2017-02-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Expressjs passt seine Funktionalität basierend auf welche Art von Rückruf, geben Sie es (das ist nicht üblich in der JS-Bibliotheken so ist es nicht verwunderlich, dass die Leute verwirrt).
Wenn Sie dies tun, wo Sie Ihren Rückruf hat vier Argumente:
drücken Sie dann meint, dies ist ein Fehler-nur middleware-handler und wird nur aufgerufen werden, wenn Fehler vorhanden sind. In die express doc, siehe den Abschnitt mit der Bezeichnung Error-handling middleware. Hinweis: dieser spezifische Teil der Seite:
Und hier ist ein ganzes Kapitel der Dokumentation gewidmet,Fehlerbehandlung middleware.
Wenn Sie nur drei Argumente:
dann ist es eine normale middleware, die aufgerufen wird, wenn es sich nicht um Fehler. Ich bin mir nicht sicher, ob Sie eine einzige Weg, um beides zu bekommen. Aber, sicherlich ein workaround, könnte Sie Ihre logging-code in eine Funktion und rufen Sie dann diese Funktion aus zwei separaten middleware-Handler, ein Fehler und eine für nicht-Fehler.
InformationsquelleAutor jfriend00
Könnte man mit try/catch
InformationsquelleAutor jamesjara