NodeJs反应代理 - 后端Api请求

时间:2018-04-30 17:14:57

标签: node.js reactjs express proxy

我目前正在使用Express Framework和React作为我的前端运行NodeJs。当我在开发机器上提出请求时,登录(passport-google)完美无瑕。由于我将https添加到生产服务器,因此它不再适用于Google Chrome。 Safari和IE正在运行。

我认为请求没有被代理到快递服务器。

"proxy": {
"/api/*": {
  "target": "http://localhost:3001",
  "secure": false
}

反应中的代理设置

这是身份验证途径

router.get(
  "/auth/google",
  passport.authenticate("google", {
    scope: ["profile", "email"]
  })
);

router.get(
  "/auth/google/callback",
  passport.authenticate("google"),
  (req, res) => {
    res.redirect("/dashboard");
  }
);

谢谢

1 个答案:

答案 0 :(得分:0)

不确定在Safari和IE中如何工作,而不是在Chrome中工作,但不能确定生产环境中不存在Create-React-App服务器。

如果要部署到Heroku,一切都会改变。在Heroku中部署到生产之前,您必须构建您的React项目。当您构建React项目时,CRA会获取所有JavaScript和CSS文件,并对所有这些文件运行Webpack和Babel并将最终版本保存到build/文件夹中。

当用户在Heroku上访问您的应用程序时,您仅在运行Node / Express API,它将用户带回到HTML文件和放置在build/文件夹中的新建JavaScript文件。

npm run build是部署到生产之前要运行的内容。

因此,当您进入生产环境时,只需要构建应用程序,将其提交,部署到Heroku,然后将其留给Express服务器即可提供所有不同的JavaScript文件。

因此,您只需担心开发环境的代理,因为生产环境中不存在CRA。

您应该在React应用程序中使用相对路由。

代理的整个想法是将请求从localhost:3000/auth/google重新路由到localhost:5000,因为您正在运行开发中的两台服务器,因此必须代理API请求,但是在部署时,不需要不再使用CRA,CRA仅存在于开发中以帮助我们创建高质量的React应用程序。

至少在Heroku中部署到生产环境时,Localhost 3000和5000不再存在。