nodejs express: имя хоста с портом из объекта req

Иногда я хочу отправить квалифицированный URL-адрес по почте из моего приложения узла. Или я хотел бы установить содержимое объекта phantom page.

Я получаю полный URL-адрес, как это в моей установке развертывания.

'http://' + req.hostname + '/myapp'

Однако на машине развития это обычно производит:

http://localhost/myapp вместо выкл http://localhost:3000/myapp

Я знаю, как получить порт, но я не хочу использовать что-то вроде:

'http://' + req.hostname + ':' + port + '/myapp'

Что привело бы к подобной ерунде в deploy behind a proxy.

http://domain.com:3000/myapp

Есть ли умный способ получить имя хоста с портом из объекта запроса, если приложение работает вне прокси-сервера?

1 ответ

  1. Вы ищете заголовок X-Forwarded-For . Это самый безопасный способ получить исходный url, если вы находитесь за прокси, балансировщики нагрузки и т.д. Проверьте, существует ли это в вашем запросе, и если существует, используйте его, в противном случае используйте то, что вы уже реализовали.

    Этот Экспресс-источник будет полезен:

    • Значение req.имя хоста является производным от значения, заданного в
      Заголовок X-Forwarded-Host, который может быть установлен клиентом или
      полномочие.

    • X-Forwarded-Proto можно установить с помощью обратного прокси-сервера, чтобы сообщить приложение
      будь то https или http или даже недопустимое имя. Это значение
      req.протокол.

    • Запрос.ip и req.значения ips заполняются списком
      адреса из X-Forwarded-For.