کدِ 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>
55 lines
1.8 KiB
TypeScript
55 lines
1.8 KiB
TypeScript
import { defineConfig } from 'vite'
|
||
import path from 'path'
|
||
import tailwindcss from '@tailwindcss/vite'
|
||
import react from '@vitejs/plugin-react'
|
||
|
||
|
||
function figmaAssetResolver() {
|
||
return {
|
||
name: 'figma-asset-resolver',
|
||
resolveId(id) {
|
||
if (id.startsWith('figma:asset/')) {
|
||
const filename = id.replace('figma:asset/', '')
|
||
return path.resolve(__dirname, 'src/assets', filename)
|
||
}
|
||
},
|
||
}
|
||
}
|
||
|
||
export default defineConfig({
|
||
plugins: [
|
||
figmaAssetResolver(),
|
||
// The React and Tailwind plugins are both required for Make, even if
|
||
// Tailwind is not being actively used – do not remove them
|
||
react(),
|
||
tailwindcss(),
|
||
],
|
||
resolve: {
|
||
alias: {
|
||
// Alias @ to the src directory
|
||
'@': path.resolve(__dirname, './src'),
|
||
},
|
||
},
|
||
|
||
// در حالتِ توسعه، هر درخواستِ /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'],
|
||
})
|