Quickstarters
Come costruire un frontend Astro e collegarlo a un backend?
35 min
in questo tutorial, costruirai un'applicazione to do list utilizzando astro e la collegherai a un servizio backend gestito alimentato da back4app questa guida è progettata per te se desideri padroneggiare le operazioni crud essenziali (crea, leggi, aggiorna, elimina) mentre costruisci un frontend moderno e statico con dati dinamici utilizzando astro entro la fine di questo tutorial, la tua applicazione interagirà senza problemi con un backend che gestisce l'archiviazione dei dati, l'autenticazione e altro sviluppare un'applicazione full stack può essere impegnativo a causa della configurazione del backend e della gestione del database per semplificare il tuo processo, utilizziamo back4app— un robusto backend as a service —così puoi concentrarti sulla creazione di un frontend astro veloce e leggero back4app fornisce un database nosql completamente gestito, autenticazione degli utenti, cloud code per logica personalizzata e sdk per un'integrazione senza soluzione di continuità questo ti consente di costruire e distribuire applicazioni scalabili senza gestire l'infrastruttura del server punti chiave seguendo questo tutorial, sarai in grado di inizializzare un progetto astro moderno con vite integrare un servizio backend per gestire i dati della tua applicazione implementare operazioni crud essenziali per una lista to do dinamica distribuire la tua applicazione completamente funzionale utilizzando flussi di lavoro containerizzati su back4app requisiti preliminari prima di iniziare, assicurati di avere node js e npm installati sul tuo computer verifica le installazioni con node v e npm v conoscenze di base di astro , inclusi il routing basato su file e la creazione di componenti un account back4app per gestire i tuoi servizi backend iscriviti su back4app https //www back4app com/ se non lo hai già fatto con questi requisiti preliminari in atto, sei pronto per iniziare a costruire il tuo progetto impostazione del progetto inizia configurando il tuo ambiente di sviluppo locale e inizializzando un nuovo progetto astro assicurati di avere node js (versione lts) installato se non lo hai, scaricalo da nodejs org https //nodejs org/ crea il tuo progetto astro eseguendo npm create astro\@latest todo app naviga nella directory del tuo progetto cd todo app avvia il server di sviluppo per verificare la configurazione npm run dev la tua app astro dovrebbe ora aprirsi nel tuo browser con il frontend pronto, procedi a creare il tuo backend su back4app creazione del backend todo back4app offre un servizio backend completamente gestito alimentato da parse , che include un database nosql, autenticazione, cloud code e api auto generate segui questi passaggi per impostare il tuo backend accedi al tuo dashboard di back4app https //www back4app com/ e clicca su "crea una nuova app " dai un nome alla tua app (ad esempio, todoapp ) e seleziona nodejs/parse come tipo di backend naviga su "database" > "browser" , clicca su "crea una classe" , e scegli "personalizzata" dai un nome alla classe task e imposta le sue autorizzazioni per consentire lettura e scrittura pubbliche (puoi affinare queste impostazioni in seguito) nella classe task aggiungi i seguenti campi titolo (string) – il titolo del compito descrizione (string) – dettagli sul compito completato (boolean) – stato di completamento del compito datascadenza (data) – la scadenza per il compito clicca su "salva" per creare lo schema integrazione di back4app con astro utilizzerai il parse javascript sdk per connettere la tua app astro al backend di back4app installa il parse sdk npm install parse configura il sdk creando un modulo dedicato ad esempio, crea un file in src/lib/parseclient js con il seguente contenuto import parse from 'parse/dist/parse min js'; const parse app id = 'your application id'; const parse js key = 'your javascript key'; const parse server url = 'https //parseapi back4app com/'; parse initialize(parse app id, parse js key); parse serverurl = parse server url; export default parse; ora puoi importare questo modulo nei tuoi componenti o pagine astro per interagire con il backend sviluppare il frontend la tua applicazione astro consisterà in componenti e pagine per aggiungere, visualizzare, aggiornare e eliminare attività usa il routing basato su file di astro e i componenti per costruire una lista di cose da fare dinamica strutturare i tuoi componenti per creare il tuo frontend, utilizzerai solid js per usare solid js in astro, installa il pacchetto solid js così npm install solid js crea una src/components cartella per organizzare i tuoi componenti ui mkdir src/components creerai i seguenti componenti taskformsolid jsx – per aggiungere nuovi compiti taskitemsolid jsx – per rappresentare compiti individuali tasklistsolid jsx – per visualizzare l'elenco dei compiti todoapp jsx – per visualizzare l'applicazione completa taskformsolid jsx questo componente rende un modulo che cattura i dettagli del compito e li invia a back4app // taskformsolid jsx import { createsignal } from 'solid js'; import parse from ' /lib/parseclient'; export default function taskformsolid(props) { const \[title, settitle] = createsignal(''); const \[description, setdescription] = createsignal(''); const handlesubmit = async (e) => { e preventdefault(); try { const task = parse object extend('task'); const task = new task(); task set('title', title()); task set('description', description()); task set('completed', false); await task save(); if (props refreshtasks) { props refreshtasks(); } settitle(''); setdescription(''); } catch (error) { console error('error adding task ', error); } }; return ( \<form onsubmit={handlesubmit}> \<input type="text" placeholder="task title" value={title()} oninput={(e) => settitle(e target value)} required /> \<input type="text" placeholder="description" value={description()} oninput={(e) => setdescription(e target value)} required /> \<button type="submit">add task\</button> \</form> ); } taskitemsolid jsx questo componente rappresenta un'attività individuale, fornendo pulsanti per attivare o disattivare il suo stato di completamento o eliminare l'attività // taskitemsolid jsx import { createsignal } from 'solid js'; import parse from ' /lib/parseclient'; export default function taskitemsolid(props) { const \[iscompleted, setiscompleted] = createsignal(props task completed); const togglecomplete = async () => { try { const query = new parse query('task'); const tasktoupdate = await query get(props task id); const newcompletedstate = !iscompleted(); tasktoupdate set('completed', newcompletedstate); await tasktoupdate save(); setiscompleted(newcompletedstate); if (props refreshtasks) { props refreshtasks(); } } catch (error) { console error('error updating task ', error); } }; const deletetask = async () => { try { const query = new parse query('task'); const tasktodelete = await query get(props task id); await tasktodelete destroy(); if (props refreshtasks) { props refreshtasks(); } } catch (error) { console error('error deleting task ', error); } }; return ( \<div class={`task item ${iscompleted() ? 'completed' ''}`}> \<div> \<h3>{props task title}\</h3> \<p>{props task description}\</p> \</div> \<div> \<button onclick={togglecomplete}> {iscompleted() ? 'undo' 'complete'} \</button> \<button onclick={deletetask}>delete\</button> \</div> \</div> ); } tasklistsolid jsx questo componente visualizza un elenco di attività iterando su un array e renderizzando ogni taskitem // tasklistsolid jsx import { for, show } from 'solid js'; import taskitemsolid from ' /taskitemsolid'; export default function tasklistsolid(props) { return ( \<div class="task list"> \<show when={props tasks length > 0} fallback={\<p>no tasks available\</p>}> \<for each={props tasks}> {(task) => ( \<taskitemsolid task={task} refreshtasks={props refreshtasks} /> )} \</for> \</show> \</div> ); } todoapp jsx questo componente importa e visualizza gli altri componenti visualizza l'intera applicazione // todoapp jsx import { createsignal, onmount, createeffect } from 'solid js'; import parse from ' /lib/parseclient'; import taskformsolid from ' /taskformsolid'; import tasklistsolid from ' /tasklistsolid'; export default function todoapp() { const \[tasks, settasks] = createsignal(\[]); const fetchtasks = async () => { try { const task = parse object extend('task'); const query = new parse query(task); const results = await query find(); settasks(results map(task => ({ id task id, task tojson() }))); } catch (error) { console error('error fetching tasks ', error); } }; onmount(() => { fetchtasks(); }); return ( <> \<taskformsolid refreshtasks={fetchtasks} /> \<tasklistsolid tasks={tasks()} refreshtasks={fetchtasks} /> \</> ); } integrazione della pagina nella tua pagina principale (ad esempio, src/pages/index astro ), gestisci lo stato dei compiti e integra i tuoi componenti // index astro import todoapp from ' /components/todoapp'; import layout from ' /layouts/layout astro'; import parse from ' /lib/parseclient'; \ \<layout> \<div class="container"> \<h1>to do list\</h1> \<todoapp client\ load /> \</div> \</layout> stilizzazione dell'applicazione per aggiungere uno stile di base globale, aggiungi gli stili css qui sotto al layouts astro file nella src/layouts directory container { max width 600px; margin 40px auto; padding 0 20px; text align center; font family sans serif; } h1 { margin bottom 20px; } form { display flex; flex direction column; align items center; gap 10px; margin bottom 20px; } form input\[type="text"] { width 80%; max width 400px; padding 8px; box sizing border box; font size 1rem; } form button { padding 8px 16px; cursor pointer; font size 1rem; border none; background color #eaeaea; transition background color 0 2s ease; } form button\ hover { background color #ccc; } task item { display flex; flex direction column; align items center; justify content center; gap 12px; border 1px solid #ccc; border radius 6px; padding 15px; margin 10px 0; background color #fafafa; text align center; transition background color 0 2s ease; } task item completed h3, task item completed p { text decoration line through; color #888; } task item h3 { margin 0; font size 1 1rem; } task item p { margin 0; font size 1rem; } task item button { padding 6px 12px; border none; background color #eaeaea; cursor pointer; font size 0 9rem; } task item button\ hover { background color #ccc; } @media (min width 600px) { task item { flex direction row; } } ora aggiungi l' is\ global attributo al tag style \<!doctype html> \<html lang="en"> \<head> \<meta charset="utf 8" /> \<meta name="viewport" content="width=device width" /> \<link rel="icon" type="image/svg+xml" href="/favicon svg" /> \<meta name="generator" content={astro generator} /> \<title>astro basics\</title> \</head> \<body> \<slot /> \</body> \</html> \<style is\ global> / your styles / \</style> distribuzione del frontend su back4app web deployment back4app web deployment fornisce un ambiente containerizzato per ospitare la tua applicazione astro genera il build di produzione npm run build creazione di un dockerfile crea un dockerfile nella radice del tuo progetto con il seguente contenuto # build stage from node 18 alpine as build workdir /app \# copy package files and install dependencies copy package json package lock json / run npm ci \# copy all files and build the application copy run npm run build \# production stage from node 18 alpine workdir /app \# set environment variables env node env=production env host=0 0 0 0 env port=3000 \# copy the build output from the build stage copy from=build /app/dist/ /dist/ \# install the static file server run npm install g serve \# expose the port expose 3000 \# start serving the static files from the "dist" folder cmd \["serve", " s", "dist", " l", "3000"] testare il contenitore docker localmente costruisci la tua immagine docker docker build t todo frontend esegui il contenitore docker run p 3000 3000 todo frontend apri http //localhost 3000 nel tuo browser per verificare che la tua app astro sia servita correttamente distribuzione su back4app inizializza un repository git, aggiungi i file del tuo progetto e fai il commit git init git add git commit m "initial commit for back4app deployment" git branch m main git remote add origin \<your github repository url> git push u origin main accedi a back4app web deployment https //www back4app com/containers clicca su "crea nuova app" , fornisci il nome del tuo progetto e seleziona il tuo repository github autorizza back4app e scegli dockerfile deployment conferma le impostazioni di build e clicca su "deploy" per avviare il deployment monitoraggio del tuo deployment dopo il deployment, utilizza il dashboard di back4app per visualizzare i log per il debug monitorare le prestazioni del container e l'uso delle risorse attivare ricostruzioni su nuovi commit configurare domini personalizzati se necessario accedi alla tua applicazione live su https //todoapp ku5ofg8s b4a run/ https //todoapp ku5ofg8s b4a run/ https //todoapp ku5ofg8s b4a run/ test e debugging dopo il deployment, conferma che il tuo frontend astro comunichi correttamente con il backend di back4app verifica api usa gli strumenti per sviluppatori del tuo browser (f12 → rete) per ispezionare le chiamate api operazioni sui compiti aggiungi, completa ed elimina compiti tramite l'interfaccia utente e verifica gli aggiornamenti nel browser del database di back4app gestione degli errori controlla i log della console per errori e testa casi limite come invii vuoti test delle prestazioni simula condizioni di rete lente utilizzando gli strumenti del browser per valutare la reattività migliori pratiche per utilizzare back4app con astro per ottimizzare la tua applicazione richieste efficienti usa operazioni in batch quando gestisci più compiti const tasks = \[task1, task2, task3]; parse object saveall(tasks); query ottimizzate recupera solo i campi necessari query select('title', 'completed'); gestione dell'ambiente memorizza le chiavi sensibili nelle variabili d'ambiente astro parse app id=your app id astro parse js key=your js key sicurezza usa acl per limitare l'accesso task setacl(new parse acl(parse user current())); offloading del backend sfrutta il cloud code per logiche complesse per ridurre l'esposizione delle api conclusione hai ora costruito un'applicazione to do list full stack creando un frontend astro, integrandolo con il backend di back4app e distribuendolo utilizzando flussi di lavoro containerizzati questo tutorial ti ha guidato attraverso ogni passaggio—dallo sviluppo locale alla distribuzione nel cloud—garantendo un'interazione senza soluzione di continuità tra la tua interfaccia astro e i servizi backend guardando al futuro, considera miglioramenti come aggiornamenti in tempo reale, autenticazione migliorata e integrazioni di terze parti per ulteriori informazioni, visita la documentazione di back4app https //www back4app com/docs ed esplora le risorse della comunità