【问题标题】:How do I redirect to front-end (port: 3000) from a back-end (port:3001) route in node/express?如何从 node/express 中的后端(端口:3001)路由重定向到前端(端口:3000)?
【发布时间】:2020-05-03 00:11:44
【问题描述】:

我在端口 3001 上定义了所有后端 API,我想重定向到端口 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

【问题讨论】:

  • 您可以使用process.NODE_ENV 来检查您是否在生产中并进行相应的重定向。
  • @ArchNoob 将其定义为开发或生产的好地方在哪里?
  • 我在我的启动脚本中将它定义为"start": "set NODE_ENV=dev && node server",并在我的路线中检查它。我假设这应该没问题?

标签: javascript node.js reactjs express passport.js


【解决方案1】:

根据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");
    }
  }
);

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 2020-06-18
    • 2020-10-31
    • 2021-05-05
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 2016-06-27
    相关资源
    最近更新 更多