yb 2 недель назад
Родитель
Сommit
250963e8e4
2 измененных файлов с 41 добавлено и 3 удалено
  1. 3 3
      .env.prod
  2. 38 0
      public/_worker.js

+ 3 - 3
.env.prod

@@ -3,13 +3,13 @@ NODE_ENV=production
 
 VITE_DEV=false
 
-# 请求路径
-VITE_BASE_URL='http://localhost:48081'
+# 请求路径 (生产环境使用空字符串,通过 Cloudflare Worker 代理)
+VITE_BASE_URL=''
 
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
 VITE_UPLOAD_TYPE=server
 # 上传路径
-VITE_UPLOAD_URL='http://localhost:48081/admin-api/infra/file/upload'
+VITE_UPLOAD_URL='/admin-api/infra/file/upload'
 
 # 接口地址
 VITE_API_URL=/admin-api

+ 38 - 0
public/_worker.js

@@ -0,0 +1,38 @@
+export default {
+  async fetch(request, env) {
+    const url = new URL(request.url);
+
+    // API 代理
+    if (url.pathname.startsWith('/admin-api')) {
+      const targetUrl = `https://apidev.ifoodme.com${url.pathname}${url.search}`;
+
+      const headers = new Headers(request.headers);
+      headers.delete('host');
+
+      const response = await fetch(targetUrl, {
+        method: request.method,
+        headers: headers,
+        body: request.method !== 'GET' && request.method !== 'HEAD' ? request.body : undefined,
+        redirect: 'follow',
+      });
+
+      const responseHeaders = new Headers(response.headers);
+      responseHeaders.set('Access-Control-Allow-Origin', '*');
+      responseHeaders.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
+      responseHeaders.set('Access-Control-Allow-Headers', 'Content-Type, Authorization, tenant-id');
+
+      if (request.method === 'OPTIONS') {
+        return new Response(null, { status: 204, headers: responseHeaders });
+      }
+
+      return new Response(response.body, {
+        status: response.status,
+        statusText: response.statusText,
+        headers: responseHeaders,
+      });
+    }
+
+    // 静态资源请求 - 使用 env.ASSETS
+    return env.ASSETS.fetch(request);
+  },
+};