Quickstarters
How to Build a Gatsby Frontend and Connect It to a Backend?
33 min
en este tutorial, construirás una aplicación de lista de tareas utilizando gatsby y la conectarás a un backend robusto proporcionado por back4app esta guía es ideal para aquellos que buscan integrar operaciones crud esenciales (crear, leer, actualizar, eliminar) en un sitio estático rápido al final, tendrás una aplicación completamente funcional que demuestra cómo aprovechar los servicios de backend de back4app mientras usas gatsby para un frontend ultrarrápido construir una aplicación de pila completa puede ser un desafío, con complejidades como la configuración del backend, la gestión de bases de datos, la autenticación y el despliegue para agilizar este proceso, utilizamos back4app—una solución escalable de backend como servicio (baas) —para que puedas concentrarte en construir tu sitio gatsby mientras se encarga de la hospedaje, bases de datos y apis back4app ofrece un conjunto completo de servicios de backend, incluyendo una base de datos lista para usar, autenticación, cloud code para lógica del lado del servidor, y integraciones de sdk sin problemas su soporte para despliegues en contenedores lo convierte en una excelente opción para aplicaciones modernas de pila completa con estas herramientas, puedes desarrollar y desplegar aplicaciones rápidamente sin gestionar la infraestructura del servidor puntos clave siguiendo este tutorial aprenderás a inicializar un proyecto moderno de gatsby integrar un servicio backend para gestionar los datos de tu aplicación implementar operaciones crud básicas para una experiencia de usuario interactiva desplegar una aplicación funcional de lista de tareas utilizando flujos de trabajo en contenedores en back4app requisitos previos asegúrate de tener lo siguiente antes de comenzar node js y npm instala la última versión lts de node js desde nodejs org https //nodejs org/ y verifica ejecutando node v y npm v en tu terminal conocimientos básicos de gatsby se espera familiaridad con react, graphql y la capa de datos de gatsby si eres nuevo en gatsby, considera revisar sus fundamentos primero una cuenta de back4app regístrate en back4app https //www back4app com/ para configurar y gestionar tus servicios backend con estos requisitos previos en su lugar, estás listo para configurar tu proyecto y comenzar a construir configuración del proyecto comienza configurando tu entorno de desarrollo local e inicializando tu proyecto gatsby verifica que node js (versión lts) esté instalado si es necesario, descárgalo desde nodejs org https //nodejs org/ verifica tu instalación node v npm v crea un nuevo proyecto gatsby usando la cli de gatsby ejecuta el siguiente comando (reemplaza todo app con el nombre de tu proyecto deseado) npx gatsby new todo app cambia a tu directorio de proyecto cd todo app inicia el servidor de desarrollo para verificar la configuración npx gatsby develop tu sitio gatsby debería estar funcionando localmente ahora abre la url proporcionada en tu navegador para confirmarlo a continuación, configurarás tu backend en back4app para gestionar el almacenamiento de datos y las interacciones con la api creando el backend de todo back4app proporciona un servicio de backend totalmente gestionado impulsado por parse , que ofrece una base de datos nosql, autenticación, cloud code y apis autogeneradas directamente desde el principio esta sección te guiará a través de la creación de un modelo de datos de tarea para almacenar tus elementos de lista de tareas y conectarlo con tu frontend de gatsby configurando 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, todogatsbyapp ) y selecciona nodejs/parse como el tipo de backend una vez que la aplicación esté creada, navega a "base de datos" > "navegador" haz clic en "crear una clase" y elige "personalizada" nombra la clase tarea y establece los permisos de nivel de clase para permitir lectura y escritura pública (puedes refinar estos ajustes más tarde) en la clase tarea , agrega los siguientes campos título (string) – el título de la tarea descripción (string) – detalles sobre la tarea completado (boolean) – indica si la tarea está completada fechadevencimiento (fecha) – la fecha límite para la tarea haz clic en "guardar" para finalizar tu esquema integrando back4app con gatsby integra back4app en tu proyecto de gatsby usando el parse javascript sdk instala el sdk a través de npm npm install parse configure el sdk inicializándolo con su id de aplicación y clave de javascript recupere estas credenciales de su panel de control de back4app en configuración de la app > seguridad y claves en su proyecto, cree un archivo (por ejemplo, src/utils/parse config js ) y agregue la siguiente configuración // src/utils/parse config js 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; ahora puede importar esta configuración en sus páginas y componentes de gatsby para interactuar con su backend desarrollando el frontend con gatsby ahora que su backend está conectado, construya la interfaz de usuario para su aplicación de lista de tareas utilizando gatsby creará páginas y componentes para agregar, mostrar, actualizar y eliminar tareas mientras aprovecha react y graphql organizando sus componentes su aplicación incluirá los siguientes componentes clave taskform js – maneja la adición de nuevas tareas tasklist js – muestra todas las tareas y proporciona controles para marcar tareas como completas o eliminarlas taskitem js – representa una tarea individual con acciones para alternar la finalización o eliminarla cree una carpeta de componentes dentro de src y agregue estos archivos mkdir src/components touch src/components/taskform js src/components/tasklist js src/components/taskitem js gestionando el estado con react hooks utilice los hooks de react ( usestate y useeffect ) para la gestión del estado y los efectos secundarios en su página principal (por ejemplo, src/pages/index js ), configure el estado de la siguiente manera // src/pages/index js import react, { usestate, useeffect } from "react"; import parse from " /utils/parse config"; import taskform from " /components/taskform"; import tasklist from " /components/tasklist"; const indexpage = () => { const \[tasks, settasks] = usestate(\[]); 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); } }; useeffect(() => { fetchtasks(); }, \[]); return ( \<div classname="container"> \<h1>to do list\</h1> \<taskform fetchtasks={fetchtasks} /> \<tasklist tasks={tasks} fetchtasks={fetchtasks} /> \</div> ); }; export default indexpage; construyendo el componente del formulario de tareas en taskform js , crea un formulario controlado para agregar tareas maneja los valores de entrada usando usestate y envía los datos a back4app // src/components/taskform js import react, { usestate } from "react"; import parse from " /utils/parse config"; const taskform = ({ fetchtasks }) => { const \[title, settitle] = usestate(""); const \[description, setdescription] = usestate(""); 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(); fetchtasks(); settitle(""); setdescription(""); } catch (error) { console error("error adding task ", error); } }; return ( \<form onsubmit={handlesubmit}> \<input type="text" placeholder="task title" value={title} onchange={(e) => settitle(e target value)} required /> \<input type="text" placeholder="description" value={description} onchange={(e) => setdescription(e target value)} required /> \<button type="submit">add task\</button> \</form> ); }; export default taskform; mostrando la lista de tareas en tasklist js , renderiza la lista de tareas mapeando a través del array de tareas y usando el taskitem componente // src/components/tasklist js import react from "react"; import taskitem from " /taskitem"; const tasklist = ({ tasks, fetchtasks }) => { return ( \<div> {tasks length === 0 ? ( \<p>no tasks available\</p> ) ( tasks map(task => ( \<taskitem key={task id} task={task} fetchtasks={fetchtasks} /> )) )} \</div> ); }; export default tasklist; creando el componente de tarea en taskitem js , crea un componente que te permita marcar una tarea como completa o eliminarla // src/components/taskitem js import react from "react"; import parse from " /utils/parse config"; const taskitem = ({ task, fetchtasks }) => { const handlecomplete = async () => { try { const query = new parse query("task"); const tasktoupdate = await query get(task id); tasktoupdate set("completed", !task completed); await tasktoupdate save(); fetchtasks(); } catch (error) { console error("error updating task ", error); } }; const handledelete = async () => { try { const query = new parse query("task"); const tasktodelete = await query get(task id); await tasktodelete destroy(); fetchtasks(); } catch (error) { console error("error deleting task ", error); } }; return ( \<div classname={`task item ${task completed ? "completed" ""}`}> \<h3>{task title}\</h3> \<p>{task description}\</p> \<button onclick={handlecomplete}> {task completed ? "undo" "complete"} \</button> \<button onclick={handledelete}>delete\</button> \</div> ); }; export default taskitem; estilizando tu aplicación crea un styles css archivo en la src carpeta con estilos básicos / src/styles 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; 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; } container p { font size 1rem; } 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; } } importa este css en tu diseño o página de gatsby (por ejemplo, en gatsby browser js ) // gatsby browser js import " /src/styles css"; finalizando la interfaz de usuario tu aplicación de lista de tareas de gatsby ahora cuenta con un frontend dinámico integrado con back4app y un estilo personalizado la aplicación te permite agregar, mostrar, actualizar y eliminar tareas mientras asegura una comunicación eficiente entre el frontend y el backend a continuación, desplegarás tu sitio de gatsby utilizando la plataforma de despliegue web de back4app desplegando el frontend en el despliegue web de back4app back4app web deployment ofrece un entorno completamente gestionado y en contenedores para alojar tus aplicaciones con implementaciones basadas en docker, puedes empaquetar tu sitio gatsby y desplegarlo sin esfuerzo configurando gatsby para producción gatsby genera un sitio estático por defecto construye tu sitio listo para producción con npx gatsby build creando un dockerfile para tu sitio antes de crear un dockerfile , primero crea un dockerignore en el directorio raíz de tu proyecto y agrega estas líneas de código git node modules eslint prettier git vscode readme md dockerfile docker compose yml public cache a continuación, crea un docker compose yml para usar comandos de docker compose el objetivo del archivo debe ser la etapa de despliegue en tu dockerfile tu docker compose yml debe contener los comandos a continuación version '3' services app image todo app gatsby build context dockerfile dockerfile target deploy ports \ "8000 80" ahora, crea un dockerfile en la raíz del proyecto para contenerizar tu sitio gatsby from node 20 as build workdir /usr/src/app copy run npm install run npm run build from nginx 1 18 alpine as deploy workdir /usr/share/nginx/html run rm rf / copy from=build /usr/src/app/public entrypoint \[ "nginx", " g", "daemon off;" ] probando el contenedor localmente antes del despliegue, construye y prueba tu contenedor docker docker build t todo gatsby frontend ejecuta el contenedor docker run p 8000 80 todo gatsby frontend visita http //localhost 8000 en tu navegador para verificar que tu sitio se sirva correctamente subiendo a github y desplegando a través de back4app sube 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, despliega usando back4app web deployment inicia sesión en back4app web deployment https //www back4app com/containers haz clic en "crear nueva aplicación" , proporciona un nombre y selecciona repositorio de github autoriza a back4app para acceder a tu repositorio y selecciona el todo gatsby repositorio elige despliegue de dockerfile y confirma la configuración de la construcción haz clic en "desplegar" para iniciar el proceso de construcción monitoreo y gestión de despliegues después del despliegue, usa el panel de control de back4app para ver registros para solucionar problemas monitorear el rendimiento del contenedor y el uso de recursos activar redeployments en nuevos commits configurar dominios personalizados si es necesario pruebas y depuración de tu aplicación una vez desplegado, prueba a fondo tu sitio de gatsby verificar la conectividad de la api abre la consola de desarrollador de tu navegador (f12 → red) para verificar las llamadas a la api durante las operaciones de tarea agregar y recuperar tareas usa la interfaz de usuario para agregar tareas, luego actualiza para confirmar la persistencia de datos en el navegador de la base de datos de back4app probar operaciones crud asegúrate de que marcar tareas como completas y la eliminación se reflejen correctamente en el backend manejar casos extremos valida las entradas del formulario y simula condiciones de red lentas utilizando herramientas de desarrollador si surgen problemas, revisa los registros de back4app o verifica tu configuración de api mejores prácticas para usar los servicios de back4app mejora el rendimiento y la seguridad de tu aplicación al optimizar las llamadas a la api usa solicitudes por lotes para múltiples operaciones y consulta solo los campos necesarios asegurar datos sensibles almacena credenciales como el id de la aplicación y la clave de javascript en variables de entorno con gatsby, crea un env archivo gatsby parse app id=your app id gatsby parse js key=your js key habilitando la auto escala activa la auto escala en el despliegue web de back4app para gestionar el alto tráfico mejorando la seguridad restringe los permisos a nivel de clase (clps) para controlar las modificaciones de datos y configura acls según sea necesario utilizando cloud code descarga la lógica compleja a cloud code para un mejor rendimiento y menor exposición de la api conclusión ahora has construido una aplicación de lista de tareas de pila completa utilizando gatsby para el frontend y los robustos servicios backend de back4app este tutorial te guió a través de la configuración de un proyecto gatsby, la integración del sdk de parse y el despliegue de tu sitio utilizando flujos de trabajo en contenedores en back4app a medida que continúas desarrollando, considera agregar características como autenticación avanzada de usuarios, actualizaciones en tiempo real e integraciones de terceros para más información y soporte, consulta la documentación de back4app https //www back4app com/docs