本项目是一个基于 React + Golang 的股票自选系统,支持股票的增删改查操作,并提供基础行情数据展示功能。系统采用前后端分离架构,具有良好的可扩展性和维护性。
项目是从零开始创建,下面是项目的 Prompt:
基于项目原型图,开发功能:自选股,需要支持合约的新增、删除、修改、查询。自选股界面需要展示基础的行情数据。支持多个不同的市场切换。
前端:react
后端:golang gin gorm
数据库:PostgreSQL
服务端需要支持跨域请求,同时需要考虑数据的校验和错误处理,如果后端服务不可用,前端需要告警提示。
后端需要展示请求和应答的日志;前端也打印通讯的日志,方便排查问题。
前端界面的设计完全依赖的 Grok,我们首先在 Trae 里面做出来产物的雏形,但是没有审美,由于使用的模型,代码能力很强,但是其他能力比较弱,所以我们需要使用 Grok 来优化前端的 UI。
通过将当前的界面截图,上传到 Grok 里面,然后让它帮我们优化 UI,可能一次性拿到很多的优化建议,我们人工评估,然后拷贝到 Trae 中执行,观察优化的效果。
最初的版本,很有工程师的味道,功能都在,但是交互逻辑比较简单直观。
优化后,我们更加贴近了用户的使用场景,实际部署,你会发现,交互上也多了很多细节,动画效果更加完善。
- 前端:React + TypeScript
- 后端:Golang + Gin + GORM
- 数据库:PostgreSQL 17
后端采用 Golang 的 Gin 框架实现 RESTful API,主要模块包括:
-
数据库模块
- 使用 GORM 作为 ORM 框架
- 支持环境变量配置数据库连接
- 自动进行数据库表迁移
-
路由模块
- RESTful API 设计
- 统一的错误处理机制
- 内置请求日志记录
-
跨域处理
- 支持本地开发环境跨域
- 可配置的 CORS 策略
- 支持 Cookie 跨域
前端使用 React + TypeScript 构建,实现了:
- 股票列表展示
- 自选股管理
- 行情数据展示
- 错误提示机制
- Docker
- Docker Compose (可选)
方便后续的部署,我们先创建一个虚拟网络
docker network create trae-network
docker run -d --name postgres -e POSTGRES_PASSWORD=123456 -p 5432:5432 --network trae-network i-do-docker.pkg.coding.net/github/trae-demo/postgres:17
- 进入后端目录:
cd backend
- 构建 Docker 镜像:
docker build -t trae-backend .
- 运行容器:
本地构建镜像启动
docker run -d --name trae-backend --network trae-network -p 8080:8080 -e DB_HOST=postgres -e DB_USER=postgres -e DB_PASSWORD=123456 -e DB_NAME=postgres trae-backend
已经打包好的镜像启动
docker run -d --name trae-backend --network trae-network -p 8080:8080 -e DB_HOST=postgres -e DB_USER=postgres -e DB_PASSWORD=123456 -e DB_NAME=postgres i-do-docker.pkg.coding.net/github/trae-demo/backend
- 进入前端目录:
cd frontend
- 构建 Docker 镜像:
docker build -t trae-frontend .
- 运行容器:
本地构建镜像启动
docker run -d --name trae-frontend --network trae-network -p 5173:80 trae-frontend
已经打包好的镜像启动
docker run -d --name trae-frontend --network trae-network -p 5173:80 i-do-docker.pkg.coding.net/github/trae-demo/frontend
- 安装依赖:
go mod download
- 运行开发服务器:
go run main.go
- 安装依赖:
npm install
- 运行开发服务器:
npm run dev
- 由于使用国外的 AI 模型,Vue3 + Element-Plus 的训练数据不足,因此选择了 React 作为前端框架
- 可能存在偶发的语法错误,需要人工修复
- 部分复杂问题的解决方案需要人工指引
- 代码结构优化需要人工指导
- 后端通过 Gin 的日志中间件记录所有请求和响应
- 前端在开发环境下会打印 API 通信日志
- 数据库操作通过 GORM 的日志功能记录
如何调整前端代码,我不想浏览器直接访问服务器地址,生产环境,全部都走 Nginx 的代理
我将帮助你配置前端代理。我看到项目中已经有了 Nginx 配置文件,我们需要修改前端的环境配置文件和 Nginx 配置,将所有的 API 请求通过 Nginx 转发到后端服务。这样可以统一请求入口,提高安全性,并且便于后期维护和扩展。
让我们先查看前端的环境配置文件,了解当前的 API 请求配置。
frontend.env
frontend.env.production
修改生产环境配置文件,将 API 请求地址改为相对路径,这样所有请求都会通过 Nginx 代理转发。
frontend.env.production
已完成前端代理配置的调整:
- 修改了生产环境配置文件
.env.production
,将 API 基础 URL 从http://test-backend:8080
改为/api
- 现有的 Nginx 配置已经正确设置了代理规则,将
/api
路径的请求转发到后端服务 - 这样的配置确保了:
- 所有 API 请求都通过 Nginx 代理转发
- 提高了系统安全性,隐藏了后端服务器的真实地址
- 统一了请求入口,便于后期维护和扩展
- 支持了跨域请求处理