Как переключаться между адресным портом в Node.js - PullRequest
0 голосов
/ 16 января 2019

В приложении Node.js я слушаю два порта на локальном хосте, как показано ниже:

const express = require('express');
app = express();

function startServer(port, hostname, app) {

    app.get('/', (req, res) => {
      res.send(`Welcome on server ${hostname} on port ${port}`);
    });

    app.listen(port, hostname);
    console.log(`listening ${hostname} on port ${port}`);
};

function startServerRedirect(port, hostname, app) {

    app.get('/', (req, res) => {

      res.send(`running server on ${hostname} on port ${port}`);
      res.redirect('localhost:4000');
    });

    app.listen(port, hostname);
    console.log(`listening ${hostname} on port ${port}`);
};

var hostname = '127.0.0.1';
startServerRedirect(3000, hostname, app);
startServer(4000, hostname, app);

У меня была проблема с запуском первого сервера на 80-порту по умолчанию, но это не имеет значения. Я хочу иметь возможность отправлять пользователя на другой порт сервера и отображать его / ее другой контент. Для меня важно сделать это так, а не app.route или что-то еще.

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Чтобы эта настройка работала, вам нужно изменить пару вещей.

Сначала вам понадобятся два отдельных приложения Express, одно для обработки перенаправлений, а другое для их получения.то есть 2 разных порта.

const app1 = express()
const app2 = express()

Тогда, конечно, в конце вы передадите их своим вспомогательным функциям:

startServerRedirect(3000, hostname, app1);
startServer(4000, hostname, app2);

Также, при вызове redirect, сделайтеубедитесь, что вы используете полный URL с "http://" в этом случае, http://localhost:4000

Наконец, вы не хотите вызывать res.send до res.redirect. Причина в том, что res.send запускаетответ, но res.redirect устанавливает заголовки http. И любые заголовки http, которые вы устанавливаете, должны быть выполнены в первую очередь. Так что здесь, поскольку это просто информация, вы можете использовать console.log вместо этого, если вы хотите проверить, как работает приложение:

app.get('/', (req, res) => {
  console.log(`running server redirect on ${hostname} on port ${port}`);
  res.redirect('http://localhost:4000');
});

Это входит в startServerRedirect

Что касается порта 80, я считаю, что вам нужен root-доступ для работы там, но это еще одна проблема ... (прокси nginx?)

0 голосов
/ 16 января 2019

Попробуйте это

const port = process.env.PORT || 80 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...