FastAPI+Vue前后端分离实战,如何避免项目结构陷阱?

摘要:前后端分离听起来高大上,但联调时的各种坑只有踩过才懂。本文用一个完整的FastAPI+Vue实战案例,分享项目结构如何组织、通信如何配置、以及那些文档里不会写的注意事项。全是血泪经验,希望能帮你少加三天班。
你写好了丝滑的FastAPI后端,Vue前端也跑得欢,但一联调就炸? 跨域、路由冲突、环境变量混乱……这些问题我当初全踩过。最惨一次,前后端联调花了整整三天,结果只是axios配置里少写了一个斜杠。今天就跟你好好聊聊FastAPI+Vue前后端分离的正确姿势,全是实战经验,不是那种抄官方文档的教程。
📌 文章脉络 🔸 一个让你血压飙升的联调场景 🔸 我的“强迫症”项目结构(直接拿去用) 🔸 通信的3个核心配置(少一个都会炸) 🔸 开发环境 vs 生产环境:别再手改baseURL了! 🔸 那些文档不会告诉你的“隐形坑” 🔸 进阶思考:拆分vs聚合,你的项目适合哪种? 🚨 先还原一个真实“案发现场” 小张花了一周写完FastAPI接口,用Postman测试全部通过,美滋滋地去睡了个好觉。第二天起床,信心满满地启动Vue项目,npm run dev,然后……控制台一片红:Access-Control-Allow-Origin 错误。 赶紧上网搜,装了个flask-cors?不对,我是FastAPI。手忙脚乱加上CORSMiddleware,跨域是解决了,但POST请求又报422 Unprocessable Entity——前端传的JSON格式后端不认。 你可能会问:不就是配置个代理、写个接口吗?错!前后端分离的“分离”二字,坑全藏在细节里。下面我把最终稳定运行的结构和配置贴出来,你直接复制粘贴就能跑。 📁 我的“强迫症”项目结构(治好了我的精神内耗) 以前我喜欢把所有文件堆在一个文件夹里,后来发现维护起来像在垃圾堆里找钥匙。现在的结构长这样,按功能拆分明细,但又不至于过度拆分(别学我一开始拆了20个文件夹,结果自己都找不到东西)。 fastapi_vue_project/ ├── backend/ # FastAPI后端 │ ├── app/ │ │ ├── api/ # 路由层(按模块分) │ │ │ ├── v1/ │ │ │ │ ├── users.py │ │ │ │ └── tasks.py │ │ ├── core/ # 配置、安全、数据库连接 │ │ │ ├── config.py │ │ │ └── database.py │ │ ├── models/ # SQLAlchemy模型 │ │ ├── schemas/ # Pydantic模型(请求/响应结构) │ │ ├── services/ # 业务逻辑层 │ │ └── main.py # 入口 │ ├── requirements.txt │ └── .env # 环境变量(别提交到git!) ├── frontend/ # Vue3前端 │ ├── src/ │ │ ├── api/ # 封装axios请求 │ │ ├── views/ # 页面 │ │ ├── router/ # 路由 │ │ └── utils/ # 工具函数 │ └── .env.development # 开发环境变量 │ └── .env.production # 生产环境变量 └── docker-compose.yml # 可选,线上部署用 👆 这个结构我用了很久,大小项目都稳得很。关键是 core/config.py 和 frontend/.env.* 这对“黄金搭档”,解决了90%的环境切换问题。 🔌 通信的3个核心配置(少一个都连不上) 1️⃣ FastAPI的CORS中间件(不是加一行就完事的) 很多人复制官方示例allow_origins=["*"]就跑了,但生产环境千万别这么干!而且你还要注意allow_credentials和allow_headers的配合。
阅读全文