Quickstarters
Come costruire un frontend Remix e collegarlo a un backend?
22 min
in questo tutorial, costruirai un'applicazione to do list utilizzando remix e la collegherai a un servizio backend gestito su back4app questa guida passo passo è progettata per aiutarti a padroneggiare le operazioni crud essenziali e a progettare un'interfaccia utente dinamica utilizzando remix costruire un'applicazione full stack implica la configurazione sia di un frontend che di un backend utilizzando back4app, puoi sfruttare un backend as a service (baas) scalabile, così puoi concentrarti sulla creazione di un'esperienza utente coinvolgente senza essere appesantito dalla configurazione del server back4app fornisce un database pronto all'uso, autenticazione, funzioni cloud e sdk per un'integrazione senza soluzione di continuità con queste capacità, puoi rapidamente prototipare, costruire e distribuire la tua applicazione remix punti chiave seguendo questo tutorial, tu inizializza un progetto remix moderno utilizzando strumenti standard del settore collega il tuo frontend remix a un backend back4app utilizzando il parse sdk implementa operazioni crud per gestire il tuo to do list containerizza la tua app remix e distribuiscila tramite il deployment web di back4app requisiti preliminari prima di iniziare, assicurati di avere quanto segue node js e npm installati sul tuo sistema verifica eseguendo node v e npm v nel tuo terminale conoscenze di base su remix , inclusi routing, loaders e actions la familiarità con i concetti di react è utile poiché remix si basa su react un account back4app per configurare e gestire i tuoi servizi backend registrati su back4app https //www back4app com/ se non lo hai già fatto con questi strumenti a disposizione, sei pronto per creare la tua applicazione remix e integrarla con un robusto backend impostazione del progetto per prima cosa, configura il tuo ambiente di sviluppo locale e inizializza il tuo progetto remix questo garantirà che tu abbia una base pulita ed efficiente per la tua applicazione inizia installando il progetto remix utilizzando il seguente comando sostituisci todo app con il nome del progetto desiderato npx create remix\@latest todo app naviga nella tua nuova directory di progetto cd todo app esegui il server di sviluppo per verificare che tutto funzioni npm run dev apri l'url fornito nel tuo terminale per confermare che la tua app remix sta funzionando correttamente impostazione del backend todo su back4app back4app offre un potente backend gestito alimentato da parse creerai un modello di dati per i tuoi compiti, che servirà da spina dorsale per la tua applicazione to do list creare la tua applicazione backend accedi al tuo dashboard di back4app https //www back4app com/ e clicca "crea una nuova app " dai un nome alla tua applicazione (ad esempio, todoremixapp ) e seleziona nodejs/parse come tipo di backend nella sezione "database" > "browser" clicca "crea una classe" e scegli "personalizzato " nomina la classe task e imposta le sue autorizzazioni di livello classe per consentire lettura e scrittura pubbliche (puoi affinare queste impostazioni in seguito) aggiungi i seguenti campi alla classe task titolo (string) – il nome del compito descrizione (string) – dettagli sul compito completato (boolean) – indica se il compito è completato datascadenza (data) – scadenza per il compito clicca "salva" per finalizzare lo schema integrazione di back4app con remix utilizzerai il parse javascript sdk per connettere la tua app remix con back4app installa il sdk eseguendo npm install parse successivamente, configura parse all'interno della tua applicazione remix apri il file app/root tsx e aggiungi il seguente codice di inizializzazione in cima sostituisci 'your application id' e 'your javascript key' con le tue credenziali dal back4app dashboard (sotto app settings > security & keys ) // app/root tsx import parse from "parse"; import react from "react"; 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 as any) serverurl = parse server url; per garantire che parse sia completamente inizializzato quando viene eseguita la tua funzione loader, specialmente lato server aggiungi questo codice alla tua layout funzione nel file root tsx // app/root tsx export function layout({ children } { children react reactnode }) { react useeffect(() => { if (typeof window !== 'undefined') { parse initialize(parse app id, parse js key); (parse as any) serverurl = "https //parseapi back4app com/"; } }, \[]); // rest of the layout function } questa configurazione consente alle tue rotte e azioni di remix di interagire senza problemi con il tuo backend back4app costruire il frontend con remix con il tuo backend configurato, ora costruirai l'interfaccia della lista delle cose da fare utilizzando remix questo comporta la creazione di rotte, loader e azioni per gestire il recupero e le mutazioni dei dati strutturare le tue rotte in remix, ogni rotta corrisponde a un file nella directory app/routes apri app/routes/ index tsx e aggiungi il seguente codice per definire la struttura della pagina e le operazioni sui dati // app/routes/ index tsx import { json, redirect } from "@remix run/node"; import { useloaderdata, form } from "@remix run/react"; import as parse from "parse"; export const loader = async () => { if (typeof window === "undefined") { try { const response = await fetch( "https //parseapi back4app com/classes/task", { headers { "x parse application id" "your application id", "x parse javascript key" "your javascript key", }, } ); const data = await response json(); return json({ tasks data results map((task) => ({ id task objectid, task })), }); } catch (error) { console error("error fetching tasks ", error); return json({ tasks \[] }); } } else { try { const task = parse object extend("task"); const query = new parse query(task); const results = await query find(); const tasks = results map((task) => ({ id task id, task tojson() })); return json({ tasks }); } catch (error) { console error("error fetching tasks ", error); return json({ tasks \[] }); } } }; export const action = async ({ request }) => { const formdata = await request formdata(); const actiontype = formdata get("actiontype"); // parse server details const parseserverurl = "https //parseapi back4app com"; const headers = { "x parse application id" "your application id", "x parse javascript key" "your javascript key", "content type" "application/json", }; try { if (actiontype === "add") { const title = formdata get("title"); const description = formdata get("description"); // create task using rest api const response = await fetch(`${parseserverurl}/classes/task`, { method "post", headers, body json stringify({ title, description, completed false, }), }); if (!response ok) { throw new error(`failed to add task ${response status}`); } } else if (actiontype === "toggle") { const id = formdata get("id"); // first get the current task to check its completed status const getresponse = await fetch(`${parseserverurl}/classes/task/${id}`, { headers, }); if (!getresponse ok) { throw new error(`failed to get task ${getresponse status}`); } const task = await getresponse json(); const updateresponse = await fetch( `${parseserverurl}/classes/task/${id}`, { method "put", headers, body json stringify({ completed !task completed, }), } ); if (!updateresponse ok) { throw new error(`failed to update task ${updateresponse status}`); } } else if (actiontype === "delete") { const id = formdata get("id"); const deleteresponse = await fetch( `${parseserverurl}/classes/task/${id}`, { method "delete", headers, } ); if (!deleteresponse ok) { throw new error(`failed to delete task ${deleteresponse status}`); } } return redirect("/"); } catch (error) { console error("error processing action ", error); return json({ error error message }, { status 400 }); } }; export default function todoroute() { const { tasks } = useloaderdata(); return ( \<div classname="container"> \<h1>to do list\</h1> \<form method="post" classname="form"> \<input type="hidden" name="actiontype" value="add" /> \<input type="text" name="title" placeholder="task title" required /> \<input type="text" name="description" placeholder="description" required /> \<button type="submit">add task\</button> \</form> \<div classname="tasks"> {tasks length === 0 ? ( \<p>no tasks available\</p> ) ( tasks map(task => ( \<div key={task id} classname={`task item ${task completed ? "completed" ""}`}> \<h3>{task title}\</h3> \<p>{task description}\</p> \<form method="post"> \<input type="hidden" name="actiontype" value="toggle" /> \<input type="hidden" name="id" value={task id} /> \<button type="submit">{task completed ? "undo" "complete"}\</button> \</form> \<form method="post"> \<input type="hidden" name="actiontype" value="delete" /> \<input type="hidden" name="id" value={task id} /> \<button type="submit">delete\</button> \</form> \</div> )) )} \</div> \</div> ); } questo percorso utilizza i loader e le azioni di remix per recuperare i compiti da back4app e gestire le interazioni degli utenti come aggiungere, attivare/disattivare e eliminare compiti stilizzare la tua app remix crea un file css in app/global css per definire l'aspetto e la sensazione di base della tua applicazione / app/global css / container { max width 600px; margin 40px auto; padding 0 20px; text align center; font family sans serif; } container 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; 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; } tasks p { font size 1rem; } task item { display flex; flex direction column; align items 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; } } importa il file css nel tuo app/root tsx aggiungendo // app/root tsx import " /global css"; la tua app remix ora ha un'interfaccia to do list funzionale che interagisce con il backend di back4app containerizzare e distribuire la tua app remix su back4app il deployment web di back4app offre un ambiente containerizzato per le tue applicazioni impacchetterai la tua app remix in un container docker e la distribuirai configurare remix per la produzione prima di containerizzare, costruisci la tua app remix in un pacchetto pronto per la produzione npm run build creazione di un dockerfile crea un dockerfile nella radice del tuo progetto con il seguente contenuto \# stage 1 build the remix app from node 18 alpine as builder workdir /app copy package json package lock json / run npm install copy run npm run build \# stage 2 serve the app using a lightweight node server from node 18 alpine workdir /app copy from=builder /app/build /build copy from=builder /app/package json / run npm install production expose 3000 cmd \["npm", "run", "start"] questo dockerfile costruisce il tuo progetto remix e lo prepara per la produzione utilizzando un runtime node js minimale costruzione e test del tuo contenitore docker costruisci la tua immagine docker localmente docker build t todo remix frontend esegui il contenitore per testare il deployment docker run p 8080 3000 todo remix frontend visita http //localhost 8080 nel tuo browser per verificare che la tua app remix funzioni correttamente distribuzione tramite back4app web deployment carica il tuo progetto su github 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 quindi, accedi a back4app web deployment https //www back4app com/containers e segui questi passaggi clicca "crea nuova app" e dai un nome al tuo progetto seleziona repository github e autorizza back4app scegli il tuo repository todo remix seleziona distribuzione dockerfile e conferma le impostazioni di build clicca "distribuisci" per avviare la tua build dopo la distribuzione, monitora il tuo container tramite il dashboard di back4app puoi visualizzare i log, gestire le build e configurare domini personalizzati testare e fare debug della tua applicazione una volta distribuita, assicurati che la tua applicazione funzioni come previsto ecco come verificare l'integrazione frontend backend connettività api apri la console di sviluppo del tuo browser (f12) e controlla le richieste di rete quando aggiungi, attivi o elimini attività persistenza dei dati aggiungi attività tramite l'interfaccia utente e aggiorna la pagina per confermare che siano salvate verifica le modifiche nel browser del database back4app sotto la classe 'task' operazioni crud testa l'attivazione dello stato di completamento e l'eliminazione delle attività se si verificano problemi, ispeziona la console e i log api gestione dei casi limite prova a inviare input vuoti per assicurarti che le tue convalide siano efficaci migliori pratiche e suggerimenti per l'ottimizzazione segui queste raccomandazioni per migliorare la sicurezza, le prestazioni e la scalabilità ottimizza le chiamate api usa richieste batch e seleziona solo i campi necessari nelle query variabili di ambiente memorizza le chiavi sensibili (id applicazione e chiave javascript) in un env file e riferisciti a esse in modo sicuro controllo degli accessi implementa acl dinamici per limitare le modifiche ai dati agli utenti autenticati cloud code scarica la logica complessa su back4app cloud code per migliorare le prestazioni e la sicurezza conclusione hai costruito con successo un'applicazione to do list full stack con remix e l'hai collegata a un backend back4app questo tutorial ti ha guidato attraverso l'inizializzazione di un progetto remix, l'integrazione di un servizio di gestione per le interazioni con il backend e la containerizzazione della tua applicazione per il deployment ora che la tua app è attiva, considera di espandere le sue funzionalità con una gestione avanzata degli utenti, aggiornamenti in tempo reale o integrazioni di terze parti per ulteriori indicazioni, esplora la documentazione di back4app https //www back4app com/docs e le risorse di remix