首先,我只想说这是我的第一个 Web 应用程序项目。在过去的几天里,我一直试图找到关于如何从本质上将前端和后端组合在一起的答案。我有很多问题,但我想回答的主要问题是如何从后端端点返回我的前端“最终产品”。
这是我的理解(如果我错了,请纠正我):
- 前端代码由客户端(浏览器)运行。
- 当客户端与网页交互时,前端会根据需要向后端调用 API 以检索/修改数据。
- 后端和前端通常是分开开发的,可以托管在不同的服务器上。
- 但是,可以(并且可能更简单)将其托管在单个域/服务器上。我希望这样做,以避免 CORS 出现一系列问题。
那么接下来的问题来了:
当我想测试我的前端并查看它的运行情况时,我只需运行npm run start
. 然后我转到给定的 url(通常http://localhost:8080/
),我可以访问我开发的前端。当我想部署它时,我运行npm run build
,它给了我一个dist
文件夹(捆绑在一起并缩小)。
如果我想在本地运行和测试我的后端,就像我使用的那样FastAPI
,我只需运行uvicorn main:app --reload
.
如何将两者结合起来?更具体地说,在我的后端代码中,我如何返回前端工作的产品(即dist
文件夹?)。我尝试了以下(简化):
@app.get("/", response_class=HTMLResponse)
def root():
return open("../frontend/dist/index.html", "r").read()
但是,当然,这只会给我没有 React 组件的静态 html。
我意识到这篇文章可能包含不正确的假设和糟糕的做法(在这种情况下,我很抱歉!我将不胜感激任何更正/建议。)但是,如果可以回答以下问题,我将不胜感激。这些是我的问题,希望能帮助我在我的计算机上本地测试我的整个 Web 应用程序。
- 如何为
GET
域根端点处的请求返回我的前端工作的产品? - 如果有一个页面A,页面B和页面下我的web应用程序,每一个URL
www.example.com/A
,www.example.com/B
和www.example.com/C
我有创建三个不同的阵营前端项目?即,相当于拥有三个dist
文件夹?处理这种情况的标准方式是什么?