【问题标题】:How to connect React frontend to Flask backend URL in production?如何在生产中将 React 前端连接到 Flask 后端 URL?
【发布时间】:2022-01-04 20:15:57
【问题描述】:

我正在托管一个 Flask 后端,该后端部署在例如后端.herokuapp.com/test。我现在正试图让我部署的 React 前端(例如 frontend.herokuapp.com)连接到这个后端:

useEffect(() => {
 fetch("/test", {
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
  },
}).then((response) =>
  response.json().then((data) => {
    setTest(data.tests);
  })
);}, []);

为了开发,我在package.json 中使用了代理:

"proxy": "http://localhost:5000"

但现在在生产中,我想在没有 localhost 的情况下访问我的后端。我怎样才能做到这一点?我还需要代理吗?因为我的前端现在自动使用请求 URL:frontend.herokuapp.com/test 而不是 backend.herokuapp.com/test

【问题讨论】:

    标签: reactjs flask heroku url fetch


    【解决方案1】:

    您需要告诉前端在哪里可以找到您尝试获取的端点,例如(在脏变体中):

    useEffect(() => {
     fetch("https://backend.herokuapp.com/test", {
      headers: {
        "Content-Type": "application/json",
        "Accept": "application/json",
      },
    }).then((response) =>
      response.json().then((data) => {
        setTest(data.tests);
      })
    );}, []);
    

    理想情况下,您会为您的开发和生产环境使用环境变量(在单独的.env 文件中)。因此,与其在您的 fetch 函数中编写绝对路径,您最终会声明一个 const API_URL=${process.env.REACT_APP_API_URL},然后在您的 fetch 函数中使用它。

    fetch(`${API_URL}/test`, {
    

    因此,您需要确保您的环境选择了正确的环境变量。更多关于how to use environment variables in CRA apps

    【讨论】:

    • 我之前已经尝试过了,但问题是这个解决方案会导致以下错误:'...已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:否请求的资源上存在“Access-Control-Allow-Origin”标头。是否有任何替代解决方案?
    • 您走的是正确的道路。请检查 CORS 标头问题的含义。您需要设置您的 BE 以允许来自您的 (fe) 域的请求,这可能会对您有所帮助:Flask-Cors
    猜你喜欢
    • 2021-11-26
    • 1970-01-01
    • 2021-04-26
    • 2020-06-16
    • 2021-09-14
    • 2018-05-16
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    相关资源
    最近更新 更多