Я использую express + node.js и у меня есть объект req, запрос в браузере - / account, но когда я захожу в req.path, я получаю '/' --- 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 is / когда это должно быть / account?
javascript
node.js
express
chovy
источник
источник
TypeError: Cannot read property 'path' of undefined
req.route
не определено Я использую экспресс 3.4.4. Что может привести к тому, что маршрут будет неопределенным?Ответы:
После небольшой игры, вы должны использовать:
console.log(req.originalUrl)
источник
const path = req.originalUrl.replace(/\?.*$/, '');
В некоторых случаях вы должны использовать:
Это дает вам путь, а не полный запрошенный URL. Например, если вас интересует только какая страница запрашивается пользователем, а не все виды параметров, то URL:
req.path даст вам:
источник
/demo
должна также потенциально проверять/demo/
).req.path
это стенографияurl.parse(req.url).pathname
и это должен быть принятый ответreq.path
дает вам относительный путь к вашему приложению. Если он смонтирован в корне, то это правильно, но для пути/my/path
, в приложении, смонтированном в/my
,req.url
даст/path
.В дополнение к этому, вот пример, расширенный из документации, которая хорошо описывает все, что вам нужно знать о доступе к путям / URL-адресам во всех случаях с помощью express:
Основано на: https://expressjs.com/en/api.html#req.originalUrl
Вывод: как указано выше в ответе c1moore , используйте:
источник
Так должно быть:
req.url
экспресс 3.1.х
источник
Причина этого заключается в том, что Express вычитает путь, по которому монтируется ваша функция обработчика, что
'/account'
в данном случае.Почему они это делают?
Потому что это облегчает повторное использование функции-обработчика. Вы можете сделать функцию обработчика , которая делает разные вещи для
req.path === '/'
иreq.path === '/goodbye'
, например:Затем вы можете подключить его к нескольким конечным точкам:
Предоставление:
источник
Если вы действительно хотите получить только «путь» без строки запроса, вы можете использовать
url
библиотеку для анализа и получения только части пути в URL.источник
req.query.ref
успешном входе в системуreq.path
это просто псевдоним дляurl.parse(req.url).pathname
Для версии 4.x теперь вы можете использовать
req.baseUrl
в дополнение к,req.path
чтобы получить полный путь. Например, OP теперь будет делать что-то вроде:источник
после выполнения я вижу следующее в консоли и получаю идеальный результат в своем браузере.
источник