Quickstarters
Wie man ein Remix-Frontend erstellt und es mit einem Backend verbindet?
22 min
in diesem tutorial werden sie eine to do liste anwendung mit remix erstellen und sie mit einem verwalteten backend dienst auf back4app verbinden dieser schrittweise leitfaden soll ihnen helfen, grundlegende crud operationen zu meistern und eine dynamische benutzeroberfläche mit remix zu gestalten der aufbau einer full stack anwendung umfasst die einrichtung sowohl eines frontends als auch eines backends durch die verwendung von back4app können sie einen skalierbaren backend as a service (baas) nutzen, sodass sie sich auf die erstellung einer ansprechenden benutzererfahrung konzentrieren können, ohne sich mit der serverkonfiguration aufzuhalten back4app bietet eine sofort einsatzbereite datenbank, authentifizierung, cloud funktionen und sdks für eine nahtlose integration mit diesen funktionen können sie schnell prototypisieren, bauen und ihre remix anwendung bereitstellen wichtige erkenntnisse indem sie dieses tutorial befolgen, werden sie ein modernes remix projekt mit branchenüblichen tools einrichten ihr remix frontend mit einem back4app backend über das parse sdk verbinden crud operationen implementieren, um ihre to do liste zu verwalten ihre remix app containerisieren und über die back4app webbereitstellung bereitstellen voraussetzungen bevor sie beginnen, stellen sie sicher, dass sie folgendes haben node js und npm auf ihrem system installiert überprüfen sie dies, indem sie node v und npm v in ihrem terminal ausführen grundkenntnisse in remix , einschließlich routing, loader und aktionen vertrautheit mit react konzepten ist hilfreich, da remix auf react aufbaut ein back4app konto zur konfiguration und verwaltung ihrer backend dienste melden sie sich bei back4app https //www back4app com/ an, falls sie dies noch nicht getan haben mit diesen tools sind sie bereit, ihre remix anwendung zu erstellen und sie mit einem robusten backend zu integrieren projektsetup zuerst richten sie ihre lokale entwicklungsumgebung ein und initialisieren ihr remix projekt dies stellt sicher, dass sie eine saubere und effiziente grundlage für ihre anwendung haben beginnen sie mit der installation des remix projekts mit dem folgenden befehl ersetzen sie todo app durch den gewünschten projektnamen npx create remix\@latest todo app navigieren sie in ihr neues projektverzeichnis cd todo app führen sie den entwicklungsserver aus, um zu überprüfen, ob alles funktioniert npm run dev öffnen sie die url, die in ihrem terminal angezeigt wird, um zu bestätigen, dass ihre remix app erfolgreich läuft einrichten des todo backends auf back4app back4app bietet ein leistungsstarkes, verwaltetes backend, das von parse unterstützt wird sie erstellen ein datenmodell für ihre aufgaben, das als rückgrat für ihre to do listen anwendung dient erstellen ihrer backend anwendung melden sie sich bei ihrem back4app dashboard https //www back4app com/ an und klicken sie auf "erstellen sie eine neue app " benennen sie ihre anwendung (zum beispiel, todoremixapp ) und wählen sie nodejs/parse als backend typ gehen sie zum "datenbank" > "browser" bereich, klicken sie auf "klasse erstellen" und wählen sie "benutzerdefiniert " benennen sie die klasse aufgabe und setzen sie die berechtigungen auf klassenebene, um öffentliches lesen und schreiben zuzulassen (sie können diese einstellungen später verfeinern) fügen sie die folgenden felder zur aufgabe klasse hinzu titel (string) – der name der aufgabe beschreibung (string) – einzelheiten zur aufgabe abgeschlossen (boolean) – gibt an, ob die aufgabe erledigt ist fälligkeitsdatum (datum) – frist für die aufgabe klicken sie auf "speichern" um das schema abzuschließen integration von back4app mit remix sie verwenden das parse javascript sdk, um ihre remix app mit back4app zu verbinden installieren sie das sdk, indem sie folgendes ausführen npm install parse konfigurieren sie als nächstes parse in ihrer remix anwendung öffnen sie die datei app/root tsx und fügen sie den folgenden initialisierungscode oben hinzu ersetzen sie 'your application id' und 'your javascript key' durch ihre anmeldeinformationen aus dem back4app dashboard (unter app einstellungen > sicherheit & schlüssel ) // 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; um sicherzustellen, dass parse vollständig initialisiert ist, wenn ihre loader funktion ausgeführt wird, insbesondere auf der serverseite fügen sie diesen code zu ihrer layout funktion in der root tsx datei hinzu // 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 } dieses setup ermöglicht es ihren remix routen und aktionen, nahtlos mit ihrem back4app backend zu interagieren frontend mit remix erstellen nachdem ihr backend konfiguriert ist, werden sie nun die to do liste oberfläche mit remix erstellen dies umfasst das erstellen von routen, loadern und aktionen, um datenabruf und änderungen zu handhaben strukturierung ihrer routen in remix entspricht jede route einer datei im app/routes verzeichnis öffnen sie app/routes/ index tsx und fügen sie den folgenden code hinzu, um die struktur und datenoperationen der seite zu definieren // 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> ); } diese route verwendet die loader und aktionen von remix, um aufgaben von back4app abzurufen und benutzerinteraktionen wie das hinzufügen, umschalten und löschen von aufgaben zu verwalten styling ihrer remix app erstellen sie eine css datei unter app/global css um das grundlegende aussehen und gefühl ihrer anwendung zu definieren / 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; } } importieren sie die css datei in ihre app/root tsx indem sie hinzufügen // app/root tsx import " /global css"; ihre remix app hat jetzt eine funktionale to do liste, die mit dem backend von back4app interagiert containerisierung und bereitstellung ihrer remix app auf back4app die web bereitstellung von back4app bietet eine containerisierte umgebung für ihre anwendungen sie werden ihre remix app in einen docker container verpacken und bereitstellen remix für die produktion konfigurieren bevor sie containerisieren, bauen sie ihre remix app in ein produktionsbereites bundle npm run build erstellen einer dockerfile erstellen sie eine dockerfile im stammverzeichnis ihres projekts mit folgendem inhalt \# 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"] diese dockerfile baut ihr remix projekt und bereitet es für die produktion mit einer minimalen node js laufzeit vor bauen und testen ihres docker containers bauen sie ihr docker image lokal docker build t todo remix frontend führen sie den container aus, um die bereitstellung zu testen docker run p 8080 3000 todo remix frontend besuchen sie http //localhost 8080 in ihrem browser, um zu überprüfen, ob ihre remix app korrekt läuft bereitstellung über back4app web deployment pushen sie ihr projekt zu 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 melden sie sich dann bei back4app web deployment https //www back4app com/containers an und folgen sie diesen schritten klicken sie auf "neue app erstellen" und benennen sie ihr projekt wählen sie github repository und autorisieren sie back4app wählen sie ihr todo remix repository wählen sie dockerfile bereitstellung und bestätigen sie die build einstellungen klicken sie auf "bereitstellen" um ihren build zu starten nach der bereitstellung überwachen sie ihren container über das back4app dashboard sie können protokolle einsehen, builds verwalten und benutzerdefinierte domains konfigurieren testen und debuggen ihrer anwendung sobald die bereitstellung abgeschlossen ist, stellen sie sicher, dass ihre anwendung wie erwartet funktioniert so überprüfen sie die integration von frontend und backend api konnektivität öffnen sie die entwicklertools ihres browsers (f12) und überprüfen sie die netzwerkrequests, wenn sie aufgaben hinzufügen, umschalten oder löschen datenpersistenz fügen sie aufgaben über die benutzeroberfläche hinzu und aktualisieren sie die seite, um zu bestätigen, dass sie gespeichert sind überprüfen sie die änderungen im back4app datenbankbrowser unter der task klasse crud operationen testen sie das umschalten des abschlussstatus und das löschen von aufgaben wenn probleme auftreten, überprüfen sie die konsole und die api protokolle behandlung von randfällen versuchen sie, leere eingaben zu übermitteln, um sicherzustellen, dass ihre validierungen effektiv sind best practices und optimierungstipps befolgen sie diese empfehlungen, um sicherheit, leistung und skalierbarkeit zu verbessern api aufrufe optimieren verwenden sie batch anfragen und wählen sie nur die notwendigen felder in abfragen aus umgebungsvariablen speichern sie sensible schlüssel (anwendungs id und javascript schlüssel) in einer env datei und verweisen sie sicher darauf zugriffskontrolle implementieren sie dynamische acls, um datenänderungen auf authentifizierte benutzer zu beschränken cloud code lagern sie komplexe logik in den back4app cloud code aus, um die leistung und sicherheit zu verbessern fazit sie haben erfolgreich eine full stack to do listenanwendung mit remix erstellt und sie mit einem back4app backend verbunden dieses tutorial hat sie durch die initialisierung eines remix projekts, die integration eines verwaltungsdienstes für backend interaktionen und die containerisierung ihrer anwendung für die bereitstellung geführt jetzt, da ihre app live ist, ziehen sie in betracht, ihre funktionen mit fortschrittlichem benutzermanagement, echtzeit updates oder drittanbieter integrationen zu erweitern für weitere anleitungen erkunden sie die back4app dokumentation https //www back4app com/docs und remix ressourcen