Ich verwende express + node.js und habe ein req-Objekt. Die Anfrage im Browser lautet / account, aber wenn ich req.path protokolliere, erhalte ich '/' --- not '/ account'.
//auth required or redirect
app.use('/account', function(req, res, next) {
console.log(req.path);
if ( !req.session.user ) {
res.redirect('/login?ref='+req.path);
} else {
next();
}
});
req.path ist / wann sollte es sein / account ??
javascript
node.js
express
chovy
quelle
quelle
TypeError: Cannot read property 'path' of undefined
req.route
ist nicht definiert. Ich benutze Express 3.4.4. Was kann dazu führen, dass die Route undefiniert ist?Antworten:
Nachdem Sie selbst ein bisschen gespielt haben, sollten Sie Folgendes verwenden:
console.log(req.originalUrl)
quelle
const path = req.originalUrl.replace(/\?.*$/, '');
In einigen Fällen sollten Sie Folgendes verwenden:
Dies gibt Ihnen den Pfad anstelle der vollständig angeforderten URL. Wenn Sie beispielsweise nur daran interessiert sind, welche Seite der Benutzer angefordert hat und nicht alle Arten von Parametern, die URL:
req.path gibt Ihnen:
quelle
/demo
sollte möglicherweise auch nach prüfen/demo/
).req.path
ist die Abkürzung vonurl.parse(req.url).pathname
und dies sollte die akzeptierte Antwort seinreq.path
Gibt Ihnen den relativen Pfad zu dem Ort an, an dem Ihre App bereitgestellt wird. Wenn es an der Wurzel gemountet ist, ist dies korrekt, aber für einen Pfad/my/path
innerhalb einer App, die an gemountet ist/my
,req.url
wird angegeben/path
.Als Ergänzung finden Sie hier ein Beispiel aus der Dokumentation, das alles, was Sie über den Zugriff auf die Pfade / URLs wissen müssen, in jedem Fall mit Express gut zusammenfasst:
Basierend auf: https://expressjs.com/en/api.html#req.originalUrl
Schlussfolgerung: Wie in der obigen Antwort von c1moore angegeben , verwenden Sie:
quelle
Es sollte sein:
req.url
Express 3.1.x.
quelle
Der Grund dafür ist, dass Express den Pfad subtrahiert, auf dem Ihre Handlerfunktion bereitgestellt ist,
'/account'
in diesem Fall.Warum machen sie das?
Weil es die Wiederverwendung der Handlerfunktion erleichtert. Sie können eine Handler - Funktion machen , die verschiedene Dinge für tut
req.path === '/'
undreq.path === '/goodbye'
zum Beispiel:Dann können Sie es an mehreren Endpunkten bereitstellen:
Geben:
quelle
Wenn Sie wirklich nur "Pfad" ohne Querystring erhalten möchten, können Sie die
url
Bibliothek verwenden, um nur den Pfad als Teil der URL zu analysieren und abzurufen .quelle
req.query.ref
wenn die Anmeldung erfolgreich istreq.path
ist nur ein Alias fürurl.parse(req.url).pathname
Für Version 4.x können Sie jetzt
req.baseUrl
zusätzlich den verwendenreq.path
, um den vollständigen Pfad abzurufen. Zum Beispiel würde das OP jetzt so etwas tun:quelle
Nach der Ausführung sehe ich Folgendes in der Konsole und erhalte ein perfektes Ergebnis in meinem Browser.
quelle