diff --git a/backend/api/main.py b/backend/api/main.py index 9843d47..fcd1e60 100644 --- a/backend/api/main.py +++ b/backend/api/main.py @@ -98,7 +98,8 @@ app = FastAPI( ) # CORS配置(允许React前端访问) -cors_origins_str = os.getenv('CORS_ORIGINS', 'http://localhost:3000,http://localhost:5173,http://as.deepx1.com,http://asapi.deepx1.com,http://r.deepx1.com') +# 默认包含:本地开发端口、主前端域名、推荐查看器域名 +cors_origins_str = os.getenv('CORS_ORIGINS', 'http://localhost:3000,http://localhost:3001,http://localhost:5173,http://as.deepx1.com,http://asapi.deepx1.com,http://r.deepx1.com,https://r.deepx1.com') cors_origins = [origin.strip() for origin in cors_origins_str.split(',') if origin.strip()] logger.info(f"CORS允许的源: {cors_origins}") diff --git a/recommendations-viewer/README.md b/recommendations-viewer/README.md index 60a2c6d..e46541c 100644 --- a/recommendations-viewer/README.md +++ b/recommendations-viewer/README.md @@ -20,16 +20,30 @@ cd recommendations-viewer npm install ``` -### 2. 配置API地址(可选) +### 2. 配置API地址 -如果需要修改API地址,可以: +**开发环境(推荐使用代理):** +- 默认使用Vite代理,无需配置 +- 代理配置在 `vite.config.js` 中,默认代理到 `http://asapi.deepx1.com` +- 如果遇到跨域问题,确保后端CORS配置包含了 `http://localhost:3001` -- 在项目根目录创建 `.env` 文件: +**生产环境(部署后):** +- **重要**:必须在项目根目录创建 `.env` 文件: ``` - VITE_API_URL=http://your-api-url.com + VITE_API_URL=http://asapi.deepx1.com ``` + 或如果使用HTTPS: + ``` + VITE_API_URL=https://asapi.deepx1.com + ``` +- 构建时,Vite会将环境变量注入到代码中 +- 确保后端CORS配置包含部署后的域名(如 `http://r.deepx1.com` 或 `https://r.deepx1.com`) -- 或者修改 `vite.config.js` 中的代理配置 +**跨域问题排查:** +1. 开发环境:确保使用Vite代理(不要设置VITE_API_URL,或设置为空) +2. 生产环境:必须设置 `VITE_API_URL` 环境变量 +3. 检查后端CORS配置是否包含前端部署域名 +4. 查看浏览器控制台的错误信息 ### 3. 启动开发服务器 diff --git a/recommendations-viewer/src/services/api.js b/recommendations-viewer/src/services/api.js index 3ebba54..985e73e 100644 --- a/recommendations-viewer/src/services/api.js +++ b/recommendations-viewer/src/services/api.js @@ -1,10 +1,15 @@ // API服务 - 只包含推荐查询功能 -const API_BASE_URL = import.meta.env.VITE_API_URL || (import.meta.env.DEV ? '' : 'http://localhost:8000'); +// 开发环境:使用Vite代理(空字符串),生产环境:使用环境变量或默认值 +const API_BASE_URL = import.meta.env.VITE_API_URL || (import.meta.env.DEV ? '' : 'http://asapi.deepx1.com'); const buildUrl = (path) => { + // 如果API_BASE_URL为空(开发环境使用代理),直接返回路径 + if (!API_BASE_URL) { + return path.startsWith('/') ? path : `/${path}`; + } const baseUrl = API_BASE_URL.endsWith('/') ? API_BASE_URL.slice(0, -1) : API_BASE_URL; const cleanPath = path.startsWith('/') ? path : `/${path}`; - return baseUrl ? `${baseUrl}${cleanPath}` : cleanPath; + return `${baseUrl}${cleanPath}`; }; export const api = {