如何从 node/express 中的后端(端口:3001)路由重定向到前端(端口:3000)?
How do I redirect to front-end (port: 3000) from a back-end (port:3001) route in node/express?
我在端口 3001 上定义了所有后端 API,我想重定向到端口 3000 的前端路由。有什么办法可以做到这一点吗?
我知道我可以简单地执行以下操作
router.get(
"/steam/return",
passport.authenticate("steam", {
failureRedirect: "/",
session: true,
}),
function (req, res) {
return res.redirect("http://localhost:3000");
}
);
但是假设我将其部署到生成自己唯一域的 Heroku,我将如何 'dynamically' 将前端路由传递给应用程序?
假设 heroku 生成 some-domain.herokuapp.com
那么我想重定向到那个域。但同时在我的开发构建中我想重定向到 http://localhost:3000
.
根据 ArchNoob
的反馈,我通过检查 process.env.NODE_ENV
解决了这个问题。当项目部署到 heroku 时,这个环境变量被设置为 production; 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 return 路线中我做了:
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");
}
}
);
我在端口 3001 上定义了所有后端 API,我想重定向到端口 3000 的前端路由。有什么办法可以做到这一点吗?
我知道我可以简单地执行以下操作
router.get(
"/steam/return",
passport.authenticate("steam", {
failureRedirect: "/",
session: true,
}),
function (req, res) {
return res.redirect("http://localhost:3000");
}
);
但是假设我将其部署到生成自己唯一域的 Heroku,我将如何 'dynamically' 将前端路由传递给应用程序?
假设 heroku 生成 some-domain.herokuapp.com
那么我想重定向到那个域。但同时在我的开发构建中我想重定向到 http://localhost:3000
.
根据 ArchNoob
的反馈,我通过检查 process.env.NODE_ENV
解决了这个问题。当项目部署到 heroku 时,这个环境变量被设置为 production; 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 return 路线中我做了:
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");
}
}
);