Допустим, мой пример URL
и я говорю, у меня есть следующий маршрут
app.get('/one/two', function (req, res) {
var url = req.url;
}
Значение url
будет /one/two
.
Как получить полный URL-адрес в Express? Например, в случае выше, я хотел бы получить http://example.com/one/two
.
Ответы:
Протокол доступен как
req.protocol
. документы здесьhttp
если вы не видите, чтоreq.get('X-Forwarded-Protocol')
установлен и имеет значениеhttps
, и в этом случае вы знаете, что это ваш протоколХозяин пришел,
req.get('host')
как указал ГопалНадеюсь, вам не нужен нестандартный порт в ваших URL-адресах, но если вам нужно знать его, вы получите его в состоянии приложения, потому что это то, что вы передали
app.listen
во время запуска сервера. Тем не менее, в случае локальной разработки на нестандартном порту, Chrome, кажется, включает порт в заголовок узла, поэтомуreq.get('host')
возвращаетlocalhost:3000
, например. Так что, по крайней мере, в случае с рабочим сайтом на стандартном порте и просмотром непосредственно в вашем экспресс-приложении (без обратного прокси-сервера)host
заголовок, кажется, правильно работает с портом в URL.Путь исходит от
req.originalUrl
(спасибо @pgrassant). Обратите внимание, что это включает в себя строку запроса. документы здесь на req.url и req.originalUrl . В зависимости от того, что вы собираетесь делать с URL,originalUrl
может быть или не быть правильное значение по сравнению сreq.url
.Объедините все это вместе, чтобы восстановить абсолютный URL.
источник
req.get('Host')
вместоreq.host
которого дает хост плюс раздел порта.host
Параметр в заголовках запроса может быть подделан. При использованииres.host
этого способа возможна «атака заголовка узла» . В структуре Django у них есть переменная «позволенные хосты», которая используется для предотвращения такой атаки. Я использую конфигурационную переменную,root_url
которую я могу добавить кreq.url
завершению. Об атаке: skeletonscribe.net/2013/05/…req.originalUrl
без параметров, просто сделайтеreq.originalUrl.split("?").shift()
. Источник: stackoverflow.com/a/32118818/2037431Вместо того, чтобы объединять все вместе, вы можете использовать API-интерфейс node.js для URL-адресов и передавать
URL.format()
информацию из Express.Пример:
источник
req.get('host')
возвращает только часть имени хоста , а не порт. Не знаю почему, но теперь я собираю номер порта из настроек и используюhostname
поле вместоhost
.pathname
, я думаю, вы имеете в видуpath
. Который включаетЯ нашел немного PITA, чтобы получить запрошенный URL. Я не могу поверить, что нет более простого способа выразить. Должно быть просто req.requested_url
Но вот как я это установил:
источник
req.port
? Это не в документации Express?req.app.settings.port
Используя url.format :
Это поддерживает все протоколы и включает номер порта. Если у вас нет строки запроса в вашем originalUrl, вы можете использовать это более чистое решение:
Если у вас есть строка запроса:
источник
Вот отличный способ добавить функцию, которую вы можете вызвать в объекте req, чтобы получить URL
Теперь у вас есть функция, которую вы можете вызвать по требованию, если вам это нужно.
источник
Для того чтобы сделать req.host/req.hostname эффективным, должно быть два условия, когда Express находится за прокси :
app.set('trust proxy', 'loopback');
в app.jsX-Forwarded-Host
заголовок должен быть указан вами в веб-сервере. например. apache, nginxnginx :
apache :
источник
127.0.0.1
отreq.get('host')
Использовать этот,
источник
или
источник
Вы должны построить это, используя
req.headers.host + req.url
. Конечно, если вы размещаете хостинг в другом порту, вы поймете идею ;-)источник
req.protocol
Я бы предложил использовать originalUrl вместо URL:
Смотрите описание originalUrl здесь: http://expressjs.com/api.html#req.originalUrl
В нашей системе мы делаем что-то вроде этого, поэтому для нас важен originalUrl:
blah_controller выглядит так:
Таким образом, наши URL имеют формат:
Следовательно, нам нужен req.originalUrl в обработчике get контроллера bar.
источник
Мой код выглядит так,
params['host_url'] = req.protocol + '://' + req.headers.host + req.url;
источник
Я использую пакет узла 'url' (npm install url)
Что это делает, когда вы звоните
это даст вам возможность получить все или часть URL. Более подробная информация здесь: https://github.com/defunctzombie/node-url
Я использовал его следующим образом, чтобы получить все, что следует после / в http://www.example.com/ для использования в качестве переменной, и открыть определенный профиль (например, facebook: http: //www.facebook. com / username )
Хотя, чтобы это работало, вы должны создать свой маршрут таким образом в вашем файле server.js:
И установите свой файл маршрута следующим образом:
источник
Вы можете использовать эту функцию в маршруте, как это
req.protocol
даст вам http или https,req.headers.host
даст вам полное имя хоста, например www.google.com,req.originalUrl
даст остальноеpathName
(в вашем случае/one/two
)источник
Спасибо всем за эту информацию. Это невероятно раздражает.
Добавьте это в свой код, и вам никогда не придется думать об этом снова:
Вы также можете делать или устанавливать другие вещи, такие как вход в консоль.
источник
Мне достаточно кода ниже!
источник