۲ — فیلدها و اندپوینتی که صفحه‌ها لازم داشتند #3

Closed
AliReza_Zareian wants to merge 3 commits from AliReza_Zareian/MathApp_frontend:zareian/api-client-2 into main
2 changed files with 33 additions and 0 deletions
Showing only changes of commit 21cce5ea2b - Show all commits

View File

@@ -22,6 +22,21 @@ export { ApiError, localTokenStorage, createHttpClient };
export type { Tokens, HttpClient, ClientOptions, RequestOptions }; export type { Tokens, HttpClient, ClientOptions, RequestOptions };
export * from './types'; export * from './types';
/**
* آدرسِ کاملِ یک مسیرِ API.
*
* fetch(apiUrl('/auth/login'), …)
*
* برای کدی که هنوز مستقیم fetch می‌زند. مسیرِ نسبی (`/api/auth/login`) در
* بیلدِ نهایی به دامنه‌ی خودِ فرانت می‌رود، nginx چون مسیر را نمی‌شناسد
* index.html برمی‌گرداند، و نتیجه پاسخِ ۲۰۰ با بدنه‌ی HTML است که موقعِ
* res.json() با «Unexpected token '<'» می‌شکند.
*/
export function apiUrl(path: string): string {
const base = createHttpClient().baseUrl;
return `${base}${path.startsWith('/') ? path : `/${path}`}`;
}
/** پرسش از دستیار کند است (تولیدِ متن)؛ ۱۵ ثانیه‌ی پیش‌فرض کم است. */ /** پرسش از دستیار کند است (تولیدِ متن)؛ ۱۵ ثانیه‌ی پیش‌فرض کم است. */
const ASK_TIMEOUT_MS = 45_000; const ASK_TIMEOUT_MS = 45_000;

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. // File types to support raw imports. Never add .css, .tsx, or .ts files to this.
assetsInclude: ['**/*.svg', '**/*.csv'], assetsInclude: ['**/*.svg', '**/*.csv'],
}) })