Quickstarters
¿Cómo construir un frontend de Remix y conectarlo a un backend?
22 min
en este tutorial, construirás una aplicación de lista de tareas utilizando remix y la conectarás a un servicio de backend gestionado en back4app esta guía paso a paso está diseñada para ayudarte a dominar las operaciones crud esenciales y diseñar una interfaz de usuario dinámica utilizando remix construir una aplicación de pila completa implica configurar tanto un frontend como un backend al usar back4app, puedes aprovechar un backend como servicio (baas) escalable, para que puedas concentrarte en crear una experiencia de usuario atractiva sin quedar atrapado en la configuración del servidor back4app proporciona una base de datos lista para usar, autenticación, funciones en la nube y sdks para una integración sin problemas con estas capacidades, puedes prototipar, construir y desplegar rápidamente tu aplicación remix conclusiones clave al seguir este tutorial, tú inicializa un proyecto moderno de remix utilizando herramientas estándar de la industria conecta tu frontend de remix a un backend de back4app utilizando el sdk de parse implementa operaciones crud para gestionar tu lista de tareas conteneriza tu aplicación remix y despliega a través de back4app web deployment requisitos previos antes de comenzar, asegúrate de tener lo siguiente node js y npm instalados en tu sistema verifica ejecutando node v y npm v en tu terminal conocimientos básicos de remix , incluyendo enrutamiento, cargadores y acciones familiaridad con conceptos de react es útil ya que remix se basa en react una cuenta de back4app para configurar y gestionar tus servicios de backend regístrate en back4app https //www back4app com/ si aún no lo has hecho con estas herramientas a mano, estás listo para crear tu aplicación remix e integrarla con un backend robusto configuración del proyecto primero, configura tu entorno de desarrollo local e inicializa tu proyecto remix esto asegurará que tengas una base limpia y eficiente para tu aplicación comienza instalando el proyecto remix usando el siguiente comando reemplaza todo app con el nombre de proyecto que desees npx create remix\@latest todo app navega a tu nuevo directorio de proyecto cd todo app ejecuta el servidor de desarrollo para verificar que todo esté funcionando npm run dev abre la url proporcionada en tu terminal para confirmar que tu aplicación remix se está ejecutando correctamente configurando el backend de todo en back4app back4app ofrece un potente backend gestionado impulsado por parse crearás un modelo de datos para tus tareas, que servirá como la columna vertebral de tu aplicación de lista de tareas creando tu aplicación backend inicia sesión en tu panel de back4app https //www back4app com/ y haz clic en "crear una nueva aplicación " nombra tu aplicación (por ejemplo, todoremixapp ) y selecciona nodejs/parse como el tipo de backend en la sección "base de datos" > "navegador" haz clic en "crear una clase" y elige "personalizada " nombra la clase tarea y establece sus permisos de nivel de clase para permitir lectura y escritura pública (puedes refinar estos ajustes más tarde) agrega los siguientes campos a la clase tarea título (string) – el nombre de la tarea descripción (string) – detalles sobre la tarea completado (boolean) – indica si la tarea está hecha fechadevencimiento (fecha) – fecha límite para la tarea haz clic en "guardar" para finalizar el esquema integrando back4app con remix usarás el sdk de javascript de parse para conectar tu aplicación remix con back4app instala el sdk ejecutando npm install parse a continuación, configura parse dentro de tu aplicación remix abre el archivo app/root tsx y agrega el siguiente código de inicialización en la parte superior reemplaza 'your application id' y 'your javascript key' con tus credenciales del panel de control de back4app (bajo 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; para asegurar que parse esté completamente inicializado cuando se ejecute tu función de cargador, especialmente en el lado del servidor agrega este código a tu layout función en el root tsx archivo // 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 } esta configuración permite que tus rutas y acciones de remix interactúen con tu backend de back4app sin problemas construyendo el frontend con remix con tu backend configurado, ahora construirás la interfaz de la lista de tareas utilizando remix esto implica crear rutas, cargadores y acciones para manejar la obtención de datos y las mutaciones estructurando tus rutas en remix, cada ruta corresponde a un archivo en el app/routes directorio abre app/routes/ index tsx y añade el siguiente código para definir la estructura de la página y las operaciones de datos // 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> ); } esta ruta utiliza los cargadores y acciones de remix para obtener tareas de back4app y manejar interacciones del usuario como agregar, alternar y eliminar tareas estilizando tu aplicación remix crea un archivo css en app/global css para definir la apariencia básica de tu aplicación / 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 el archivo css en tu app/root tsx añadiendo // app/root tsx import " /global css"; tu aplicación remix ahora tiene una interfaz funcional de lista de tareas que interactúa con el backend de back4app contenerizando y desplegando tu aplicación remix en back4app el despliegue web de back4app ofrece un entorno contenerizado para tus aplicaciones empaquetarás tu aplicación remix en un contenedor docker y la desplegarás configurando remix para producción antes de contenerizar, construye tu aplicación remix en un paquete listo para producción npm run build creando un dockerfile crea un dockerfile en la raíz de tu proyecto con el siguiente contenido \# 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"] este dockerfile construye tu proyecto remix y lo prepara para producción utilizando un runtime mínimo de node js construyendo y probando tu contenedor docker construye tu imagen docker localmente docker build t todo remix frontend ejecuta el contenedor para probar el despliegue docker run p 8080 3000 todo remix frontend visita http //localhost 8080 en tu navegador para verificar que tu aplicación remix está funcionando correctamente despliegue a través de back4app web deployment envía tu proyecto a 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 luego, inicia sesión en back4app web deployment https //www back4app com/containers y sigue estos pasos haz clic en "crear nueva aplicación" y nombra tu proyecto selecciona repositorio de github y autoriza a back4app elige tu todo remix repositorio selecciona despliegue de dockerfile y confirma la configuración de la construcción haz clic en "desplegar" para iniciar tu construcción después del despliegue, monitorea tu contenedor a través del panel de control de back4app puedes ver registros, gestionar construcciones y configurar dominios personalizados pruebas y depuración de tu aplicación una vez desplegada, asegúrate de que tu aplicación funcione como se espera aquí te mostramos cómo verificar la integración frontend backend conectividad api abre la consola de desarrollador de tu navegador (f12) y verifica las solicitudes de red al agregar, alternar o eliminar tareas persistencia de datos agrega tareas a través de la interfaz de usuario y actualiza la página para confirmar que se han guardado verifica los cambios en el navegador de base de datos de back4app bajo la clase tarea operaciones crud prueba alternar el estado de finalización y eliminar tareas si surgen problemas, inspecciona la consola y los registros de la api manejo de casos especiales intenta enviar entradas vacías para asegurarte de que tus validaciones sean efectivas mejores prácticas y consejos de optimización sigue estas recomendaciones para mejorar la seguridad, el rendimiento y la escalabilidad optimiza las llamadas a la api utiliza solicitudes por lotes y selecciona solo los campos necesarios en las consultas variables de entorno almacena claves sensibles (id de aplicación y clave de javascript) en un env archivo y refiérete a ellas de manera segura control de acceso implementa acls dinámicas para restringir las modificaciones de datos a usuarios autenticados código en la nube desplaza la lógica compleja al código en la nube de back4app para mejorar el rendimiento y la seguridad conclusión has construido con éxito una aplicación de lista de tareas de pila completa con remix y la has conectado a un backend de back4app este tutorial te guió a través de la inicialización de un proyecto remix, la integración de un servicio de gestión para interacciones de backend y la contenedorización de tu aplicación para su implementación ahora que tu aplicación está en vivo, considera expandir sus características con gestión avanzada de usuarios, actualizaciones en tiempo real o integraciones de terceros para más orientación, explora la documentación de back4app https //www back4app com/docs y recursos de remix