Używam express + node.js i mam obiekt req, żądanie w przeglądarce to / account, ale kiedy loguję req.path, otrzymuję „/” --- nie „/ 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 to / kiedy powinno być / account ??
javascript
node.js
express
chovy
źródło
źródło
TypeError: Cannot read property 'path' of undefined
req.route
jest niezdefiniowana. Używam Express 3.4.4. Co może spowodować niezdefiniowanie trasy?Odpowiedzi:
Po odrobinie zabawy powinieneś użyć:
console.log(req.originalUrl)
źródło
const path = req.originalUrl.replace(/\?.*$/, '');
W niektórych przypadkach powinieneś użyć:
To daje ścieżkę zamiast pełnego żądanego adresu URL. Na przykład, jeśli interesuje Cię tylko strona żądana przez użytkownika, a nie wszystkie rodzaje parametrów, adres URL:
req.path da Ci:
źródło
/demo
powinno również potencjalnie sprawdzać/demo/
).req.path
jest skrótemurl.parse(req.url).pathname
i to powinna być akceptowana odpowiedźreq.path
podaje względną ścieżkę do miejsca zainstalowania aplikacji. Jeśli jest zamontowany u nasady niż jest to poprawne, ale na ścieżce/my/path
, w ciągu aplikacja zamontowany/my
,req.url
dadzą/path
.Jako uzupełnienie, oto przykład rozwinięty z dokumentacji, który ładnie opakowuje wszystko, co musisz wiedzieć o dostępie do ścieżek / adresów URL we wszystkich przypadkach za pomocą express:
Na podstawie: https://expressjs.com/en/api.html#req.originalUrl
Wniosek: Jak odpowiedź c1moore za stwierdza powyżej, zastosowanie:
źródło
Powinno być:
req.url
express 3.1.x
źródło
Powodem tego jest to, że Express odejmuje ścieżkę, na której jest zamontowana funkcja obsługi, co ma miejsce
'/account'
w tym przypadku.Dlaczego oni to robią?
Ponieważ ułatwia to ponowne użycie funkcji obsługi. Możesz utworzyć funkcję obsługi, która wykonuje różne rzeczy dla
req.path === '/'
ireq.path === '/goodbye'
na przykład:Następnie możesz zamontować go na wielu punktach końcowych:
Dający:
źródło
Jeśli naprawdę chcesz uzyskać tylko „ścieżkę” bez zapytań, możesz użyć
url
biblioteki do analizy i uzyskać tylko część ścieżki adresu URL.źródło
req.query.ref
jeśli logowanie się powiedziereq.path
jest po prostu aliasem dlaurl.parse(req.url).pathname
W wersji 4.x możesz teraz użyć
req.baseUrl
dodatku do,req.path
aby uzyskać pełną ścieżkę. Na przykład OP zrobiłby teraz coś takiego:źródło
po uruchomieniu w konsoli widzę następujący komunikat i uzyskuję doskonały wynik w przeglądarce.
źródło