Проблема перенаправления URL-адресов Express.js: как перенаправить запросы на основе имени хоста и пути?Javascript

Форум по Javascript
Ответить
Гость
 Проблема перенаправления URL-адресов Express.js: как перенаправить запросы на основе имени хоста и пути?

Сообщение Гость »


Я работаю над проектом перенаправления URL-адресов в node.js и express.js, размещенном на EC2.

В AWS Route53 я управляю десятью основными доменами, каждый из которых сопровождается различными поддоменами. Вот краткий обзор:
[*]
test.com с такими поддоменами, как app.test.com, < code>app2.test.com и т. д.
[*]
example.com с такими поддоменами, как redirect.example.com, < code>help.example.com и другие.

В этих доменах настроены записи CNAME, указывающие на стандартный субдомен по адресу subdomain.myorigindomain.com.

В моей базе данных я храню записи, включающие основной домен, субдомен, строку перенаправления и пункт назначения. Кроме того, я определяю пункт назначения по умолчанию для случаев, когда у запроса нет определенного пути.

Ниже приведен мой код для обработки перенаправления:

const app = express(); app.use(bodyParser.json()); app.use(express.static(path.join(__dirname, "/../client/build"))); app.get("*", async (req, res) => { res.setHeader("Контроль доступа-Разрешить-Origin", "*"); пытаться { вар realUrl = (req.connection.encrypted ? «https» : «http») + «://» + req.headers.host + req.url; const Url = url.parse(realUrl, true); Url.remoteAddress = req.header("x-forwarded-for") || req.connection.remoteAddress; const redirectString = Url.path.substr(1); если (перенаправитьСтроку) { //ищем в базе данных и перенаправляем в пункт назначения }еще{ //ищем субдомен и домен в базе данных и перенаправляем в пункт назначения по умолчанию } }) Проблема:
Каждый раз, когда пользователь отправляет запрос из исходного домена subdomain.myorigindomain.com или любого основного домена, например app.test.com, мое внешнее приложение обслуживается с использованием следующей строки кода:

app.use(express.static(path.join(__dirname, "/../client/build")));

При удалении вышеуказанного кода строки все запросы обрабатываются *, и мой интерфейс не обслуживается для исходного домена subdomain.myorigindomain .com

Ожидаемое поведение:
Мое внешнее приложение будет обслуживаться только тогда, когда пользователь отправит запрос с моего исходного домена, а именно subdomain.myorigindomain.com.

Во всех остальных случаях, например при запросах от app.test.com, маршрутизация будет обрабатываться * маршрут.

Пример:
Случай 1: Когда кто-то нажимает app.test.com/help в браузере, он переходит на *< /code> маршруты и поиск **/help ** в базе данных и перенаправление к месту назначения

Случай 2 Когда кто-то нажимает app.test.com в браузере, запрос должен обрабатываться * маршрутизируется и ищет URL-адрес по умолчанию app.test.com и перенаправляет на URL-адрес по умолчанию.

Но в приведенном выше Случае 2 запрос обрабатывается следующей строкой кода:

app.use(express.static(path.join(__dirname, "/../client/build"))); и мой интерфейс обслуживается.

Случай 3. Когда кто-то обращается к моему исходному домену, например subdomain.myorigindomain.com, он должен обслуживать только мое внешнее приложение.
Случай 3: когда кто-то обращается к моему исходному домену, например subdomain.myorigindomain.com, он должен обслуживать только мое внешнее приложение.Случай 3:. р>
Вот что я пробовал:

Код с комментариями ниже:

//app.use(express.static(path.join(__dirname, "/../client/build"))); Добавлено условие, если имя хоста совпадает с источником, а затем перенаправить во внешний интерфейс и отправить index.html по маршруту *, как показано ниже. :

app.get("*", async (req, res) => { res.setHeader("Контроль доступа-Разрешить-Origin", "*"); пытаться { вар realUrl = (req.connection.encrypted ? «https» : «http») + «://» + req.headers.host + req.url; const Url = url.parse(realUrl, true); Url.remoteAddress = req.header("x-forwarded-for") || req.connection.remoteAddress; if (Url.hostname === 'subdomain.myorigindomain.com' && (Url.pathname === '/' || Url.pathname === '/admin')) { /** * Я попробовал ниже, попробовал все нижеперечисленные вещи * Способ 1: return res.sendFile(path.join(__dirname + "/../client/build/index.html")); * Способ 2: * res.set("location", `${configTable.origin}/admin`); * res.set("Cache-Control", "no-store"); * return res.status(301).send(); * Способ 3: return res.redirect(`${configTable.origin}/admin`) * Метод 4: app.use(express.static(path.join(__dirname, "/../client/build"))); */ } Но ничего не помогло.
Как я могу решить эту проблему?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»