make the relative /api paths in App.tsx actually reach the backend

کدِ auth داخلِ App.tsx مسیرهای نسبی صدا می‌زند (`/api/auth/login` و مانندش).
این مسیرها به دامنه‌ی خودِ فرانت می‌روند، nginx چون آن مسیر را نمی‌شناسد
index.html برمی‌گرداند، و نتیجه پاسخِ ۲۰۰ با بدنه‌ی HTML است — یعنی res.ok
درست به نظر می‌رسد و بعد res.json() با «Unexpected token '<'» می‌شکند.
همین الان روی math.tadrisino2.ir قابلِ بازتولید است.

در حالتِ توسعه پروکسیِ vite حلش می‌کند: هر /api به بک‌اند فرستاده می‌شود و
کدِ موجود بدونِ هیچ تغییری کار می‌کند. مقصد با VITE_API_PROXY_TARGET قابلِ
عوض کردن است، پیش‌فرض بک‌اندِ مشترک.

برای بیلدِ نهایی apiUrl() اضافه شد: fetch(apiUrl('/auth/login')) به‌جای
fetch('/api/auth/login'). یا اگر روی سرور مسیرِ /api به بک‌اند پروکسی شود،
مسیرهای نسبی همان‌طور که هستند درست کار می‌کنند — آن راه حتی بهتر است چون
same-origin می‌شود و CORS از میان برمی‌دارد.

App.tsx دست نخورده؛ تصمیمِ اینکه کدام راه را بروند با خودشان است.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-14 02:25:55 +03:30
parent 007c450c0a
commit 21cce5ea2b
2 changed files with 33 additions and 0 deletions

View File

@@ -31,6 +31,24 @@ export default defineConfig({
},
},
// در حالتِ توسعه، هر درخواستِ /api به بک‌اند فرستاده می‌شود.
//
// چرا لازم است: کدِ اپ مسیرهای نسبی صدا می‌زند (مثلاً /api/auth/login). بدونِ
// این پروکسی، آن درخواست به خودِ سرورِ vite می‌رود و چون مسیرِ ناشناخته است
// index.html برمی‌گردد — یعنی پاسخِ ۲۰۰ ولی HTML، و کد موقعِ res.json() با
// «Unexpected token '<'» می‌شکند. خطایی که علتش از پیامش معلوم نیست.
//
// مقصد را با VITE_API_PROXY_TARGET عوض کنید (پیش‌فرض: بک‌اندِ مشترک).
server: {
proxy: {
'/api': {
target: process.env.VITE_API_PROXY_TARGET || 'https://api.math.tadrisino2.ir',
changeOrigin: true,
secure: true,
},
},
},
// File types to support raw imports. Never add .css, .tsx, or .ts files to this.
assetsInclude: ['**/*.svg', '**/*.csv'],
})