Ich benutze Express + node.js und ich habe ein req-Objekt, die Anfrage im Browser ist/account, aber wenn ich req.path log ich bekomme '/' - - Nicht '/ Konto'.Wie man Anfrage Pfad mit ausdrücklichen req Objekt
req.path ist/wann sollte/account ??
Ich benutze Express + node.js und ich habe ein req-Objekt, die Anfrage im Browser ist/account, aber wenn ich req.path log ich bekomme '/' - - Nicht '/ Konto'.Wie man Anfrage Pfad mit ausdrücklichen req Objekt
req.path ist/wann sollte/account ??
Nach ein bisschen ein selbst spielen, sollten Sie verwenden:
console.log(req.originalUrl)
immer noch nicht klar, warum req.path nicht so funktioniert, wie es sollte. – chovy
Ich denke, es hat etwas mit der Positionierung von Middleware zu tun, aber Sie haben Recht, es macht keinen Sinn. – Menztrual
Es ist definitiv die Middleware. Dies geschieht mit zusätzlichen Routern in Express 4. Wenn eines von einem bestimmten Pfad entfernt ist, wird es in sich selbst so vorgetäuscht, dass es von der Wurzel entfernt ist. Das ist gut für die Isolation, aber schwierig, wenn Sie nicht wissen, wie Sie den ursprünglichen vollen Wert erhalten. Danke für das Posten! – juanpaco
Es sollte:
req.url
express 3.1.x
In einigen Fällen Sie sollten verwenden:
req.path
Dies gibt Ihnen den Pfad anstelle der vollständigen angeforderten URL. So sind zum Beispiel, wenn Sie nur, in welcher Seite interessiert der Benutzer aufgefordert und nicht alle Arten von Parametern die URL:
/myurl.htm?allkinds&ofparameters=true
req.path Sie geben:
/myurl.html
Achten Sie darauf, dass bei Überprüfungen dieser URL auch ein Häkchen für einen nachgestellten Schrägstrich eingefügt wird, wenn dieser in Ihrer App gültig ist. (d. h. die Überprüfung auf '/ demo' sollte auch nach'/demo/'suchen). – Vinay
Wenn Sie wirklich wollen, bekommen Nur "Pfad" ohne Querystring, können Sie url
Bibliothek zu parsen und erhalten nur Pfad Teil der URL.
var url = require('url');
//auth required or redirect
app.use('/account', function(req, res, next) {
var path = url.parse(req.url).pathname;
if (!req.session.user) {
res.redirect('/login?ref='+path);
} else {
next();
}
});
das ist genau das, was ich will. Verwenden Sie es mit '' 'req.query.ref''', wenn die Anmeldung erfolgreich war –
Dies funktioniert gut mit universellem Code, da es [Ort] entspricht (https://developer.mozilla.org/en-US/docs/Web/ API/Standort) spez. Weniger Dinge, an die Sie sich erinnern können und die einfacher über Client und Server hinweg getestet werden können. – cchamberlain
req.route.path is working for me
var pool = require('../db');
module.exports.get_plants = function(req, res) {
// to run a query we can acquire a client from the pool,
// run a query on the client, and then return the client to the pool
pool.connect(function(err, client, done) {
if (err) {
return console.error('error fetching client from pool', err);
}
client.query('SELECT * FROM plants', function(err, result) {
//call `done()` to release the client back to the pool
done();
if (err) {
return console.error('error running query', err);
}
console.log('A call to route: %s', req.route.path + '\nRequest type: ' + req.method.toLowerCase());
res.json(result);
});
});
};
nach dem Ausführen Ich sehe in der Konsole die folgende und ich perfektes Ergebnis in meinem Browser bekommen.
Express server listening on port 3000 in development mode
A call to route: /plants
Request type: get
//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 is/when it should be /account ??
Der Grund dafür ist, dass Express den Weg Ihre Handler-Funktion subtrahiert auf montiert, die '/account'
in diesem Fall ist.
Warum machen sie das?
Weil es die Wiederverwendung der Handler-Funktion erleichtert. Sie können eine Handler-Funktion machen, die verschiedene Dinge für req.path === '/'
und req.path === '/goodbye'
zum Beispiel tut:
function sendGreeting(req, res, next) {
res.send(req.path == '/goodbye' ? 'Farewell!' : 'Hello there!')
}
Dann können Sie es an mehrere Endpunkte montieren:
app.use('/world', sendGreeting)
app.use('/aliens', sendGreeting)
Giving:
/world ==> Hello there!
/world/goodbye ==> Farewell!
/aliens ==> Hello there!
/aliens/goodbye ==> Farewell!
res.redirect(req.header('referrer'));
wird zur aktuellen URL-Adresse umgeleitet.
Für Version 4.x Sie können nun req.baseUrl
zusätzlich zu req.path
verwenden, um den vollständigen Pfad zu erhalten. Zum Beispiel würde die OP tun jetzt so etwas wie:
//auth required or redirect
app.use('/account', function(req, res, next) {
console.log(req.baseUrl + req.path); // => /account
if(!req.session.user) {
res.redirect('/login?ref=' + encodeURIComponent(req.baseUrl + req.path)); // => /login?ref=%2Faccount
} else {
next();
}
});
Versuch 'req.route.path' – vinayr
' Typeerror: kann Eigenschaft ‚Pfad‘ von undefined' – chovy
req.route.path richtig gelesen und dokumentiert [hier ] (http://expressjs.com/api.html#req.route). Welche Version von Express verwenden Sie? – zemirco