Как перенаправить на внешний интерфейс (порт: 3000) с внутреннего маршрута (порт: 3001) в узле / express? - PullRequest
0 голосов
/ 03 мая 2020

У меня есть все мои внутренние API-интерфейсы, определенные для порта 3001, и я хотел бы перенаправить на внешний маршрут, который является портом 3000. Есть ли способ сделать это?

Я знаю, что я может просто сделать следующее

router.get(
  "/steam/return",
  passport.authenticate("steam", {
    failureRedirect: "/",
    session: true,
  }),
  function (req, res) {
    return res.redirect("http://localhost:3000");
  }
);

Но если предположить, что я развертываю это в Heroku, который генерирует собственный уникальный домен, как бы я «динамически» передавал интерфейсный маршрут к приложению?

Предположим, что heroku генерирует some-domain.herokuapp.com, тогда я бы хотел перенаправить на этот домен. Но в то же время в моей разработке я бы хотел перенаправить на http://localhost:3000.

1 Ответ

0 голосов
/ 03 мая 2020

На основе отзывов от ArchNoob Я смог решить эту проблему, проверив process.env.NODE_ENV. Эта переменная среды устанавливается на производство, когда проект развернут на heroku; heroku делает это по умолчанию.

Тогда в моей стратегии паспорта я сделал:

// port 3443 is for my api routes
const returnURLString =
    process.env.NODE_ENV === "production"
      ? "https://my-app.herokuapp.com/api/auth/steam/return"
      : "http://localhost:3443/api/auth/steam/return";

  const realmString =
    process.env.NODE_ENV === "production"
      ? "https://my-app.herokuapp.com/"
      : "http://localhost:3443/";
  passport.use(
    new SteamStrategy(
      {
        returnURL: returnURLString,
        realm: realmString,
        apiKey: myAPIKey,
      },
  ...

И в своем обратном маршруте API я сделал:

router.get(
  "/steam/return",
  passport.authenticate("steam", {
    failureRedirect: "/",
    session: true,
  }),
  function (req, res) {
    const env = process.env.NODE_ENV || "dev";
    if (env === "production") {
      return res.redirect("https://my-app.herokuapp.com/");
    } else {
      return res.redirect("http://localhost:3000");
    }
  }
);
...