Remote Functions تو SvelteKit: صدا زدن سرور مثل یه تابع معمولی
خلاصهٔ کاملتر
مستندات SvelteKit یه بخش کامل درباره Remote Functions داره که از نسخه 2.27 اضافه شده. ایده اینه که یه تابع رو روی سرور بنویسید و از هرجای اپ صداش بزنید. اجرا همیشه روی سرور اتفاق میافته، پس میتونه با server-only moduleها (یعنی فایلهایی که هیچوقت به مرورگر نمیرسن، مثل کلاینت دیتابیس یا متغیرهای محیطی) کار کنه. در کنار پشتیبانی آزمایشی Svelte از await توی کامپوننت، میشه داده رو مستقیم داخل خود کامپوننت لود کرد.
این قابلیت هنوز experimentalه، یعنی ممکنه باگ داشته باشه و بدون اطلاع قبلی عوض بشه. برای فعال کردنش باید دوتا گزینه experimental.remoteFunctions و compilerOptions.experimental.async رو توی پلاگین sveltekit در vite.config.js روشن کنید.
این توابع از یه remote module صادر میشن، یعنی فایلی که اسمش یه بخش remote داره، مثل data.remote.ts. چهار نوع دارن: query، form، command و prerender. روی کلاینت، هر تابع به یه wrapper دور fetch تبدیل میشه که از طریق یه endpoint خودکار، نسخه سرورش رو صدا میزنه. این فایلها هرجای src میتونن باشن، بهجز داخل پوشه server. کتابخونههایی که @sveltejs/kit رو توی peerDependencies دارن هم میتونن remote function ارائه بدن.
نوع query برای خوندن داده پویا از سروره. مثال خود مستندات اینه:
export const getPosts = query(async () => {
const posts = await db.sql`
SELECT title, slug
FROM post
ORDER BY published_at
DESC
`;
return posts;
});تو کامپوننت میشه مستقیم await getPosts() نوشت. تا وقتی Promise تموم نشده یا اگه خطا بده، نزدیکترین svelte:boundary وارد عمل میشه. اگه نخواید از await استفاده کنید، query سهتا property به اسم loading، error و current هم داره. برای دادههای ثابت هم بهتره از prerender استفاده بشه، چون query روی صفحهای که کامل prerender شده (مثلاً با adapter-static) کار نمیکنه.
queryها میتونن آرگومان هم بگیرن، مثلاً slug یه پست. ولی چون هر query در عمل یه endpoint HTTP باز میکنه، مستندات تأکید داره که آرگومان حتماً اعتبارسنجی بشه. برای این کار میشه از هر کتابخونه سازگار با Standard Schema مثل Zod یا Valibot استفاده کرد، مثلاً query, async (slug) => ...). یعنی هر ورودیای که از کلاینت میاد قبل از رسیدن به دیتابیس چک میشه.
نکات کلیدی:
- Remote Functions از SvelteKit 2.27 در دسترسه و هنوز آزمایشیه
- فعالسازی با experimental.remoteFunctions و compilerOptions.experimental.async
- فایلها باید اسمی با بخش remote داشته باشن، مثل data.remote.ts، و داخل پوشه server نباشن
- چهار نوع داره: query، form، command و prerender
- آرگومانها رو باید با Standard Schema مثل Zod یا Valibot اعتبارسنجی کرد




