SvelteKit Remote Functions: Część 1
SvelteKit testuje nowy sposób obsługi danych. Nazywa się on Remote Functions. Funkcja ta umożliwia łatwą komunikację między klientem a serwerem.
Czym są Remote Functions?
Remote Functions pozwalają wywoływać logikę po stronie serwera z dowolnej części aplikacji SvelteKit. Mimo że wywołujesz je z poziomu klienta, kod jest wykonywany na serwerze. Oznacza to, że możesz bezpiecznie uzyskać dostęp do baz danych lub prywatnych zmiennych środowiskowych.
Jak je włączyć
Musisz włączyć tryb eksperymentalny w pliku svelte.config.js:
const config = { kit: { experimental: { remoteFunctions: true } }, compilerOptions: { experimental: { async: true } } };
export default config;
Praca z zapytaniami
Funkcje zdalne możesz tworzyć, używając plików z rozszerzeniem .remote.js lub .remote.ts. Istnieją cztery typy:
- query (używane do pobierania danych)
- form
- command
- prerender
Funkcja query działa jak żądanie HTTP GET. Możesz ją zaimportować do swoich komponentów Svelte i użyć await, aby pobrać dane.
Przykład zdalnego zapytania:
import { query } from '$app/server'; import * as db from '$lib/server/database';
export const getPosts = query(async () => {
const posts = await db.sqlSELECT title, slug FROM post;
return posts;
});
W swoim komponencie używasz jej w następujący sposób:
{#each await getPosts() as { title, slug }}
Zarządzanie stanem
Funkcja query udostępnia trzy przydatne właściwości do zarządzania interfejsem użytkownika:
- loading:
truepodczas pobierania danych. - error:
true, jeśli żądanie zakończy się niepowodzeniem. - current: przechowuje pomyślnie pobrane dane.
Inteligentne funkcje
Walidacja: Możesz używać bibliotek takich jak Zod lub Valibot do walidacji argumentów przekazywanych do zapytania. Dzięki temu Twój serwer pozostaje bezpieczny.
Obsługa danych: SvelteKit używa
devaluedo przesyłania danych. Obsługuje to złożone typy, takie jakDateiMap, czego standardowy JSON nie potrafi zrobić w łatwy sposób.Deduplikacja: Jeśli wywołasz to samo zapytanie wielokrotnie z tymi samymi argumentami, SvelteKit wykona je tylko raz. Zapobiega to dodatkowemu obciążeniu bazy danych.
Odświeżanie: Możesz wywołać
.refresh()na zapytaniu, aby natychmiast pobrać najnowsze dane z serwera.
Uwaga: Funkcje te są eksperymentalne. Składnia może ulec zmianie w przyszłych aktualizacjach.
Źródło: https://dev.to/nnutnonn/sveltekit-kaarthamngaankab-remote-function-part-1-4hg4
