Quickstarters
Cómo construir un frontend de Astro y conectarlo a un backend?
34 min
en este tutorial, construirás una aplicación de lista de tareas utilizando astro y la conectarás a un servicio backend gestionado impulsado por back4app esta guía está diseñada para ti si deseas dominar las operaciones crud esenciales (crear, leer, actualizar, eliminar) mientras construyes un frontend moderno y estático con datos dinámicos utilizando astro al final de este tutorial, tu aplicación interactuará sin problemas con un backend que maneja el almacenamiento de datos, la autenticación y más desarrollar una aplicación de pila completa puede ser un desafío debido a la configuración del backend y la gestión de bases de datos para agilizar tu proceso, utilizamos back4app— un robusto backend como servicio —para que puedas centrarte en crear un frontend de astro rápido y ligero back4app proporciona una base de datos nosql completamente gestionada, autenticación de usuarios, cloud code para lógica personalizada y sdks para una integración sin problemas esto te permite construir y desplegar aplicaciones escalables sin gestionar la infraestructura del servidor conclusiones clave al seguir este tutorial, usted inicializar un proyecto moderno de astro con vite integrar un servicio backend para gestionar los datos de su aplicación implementar operaciones crud esenciales para una lista de tareas dinámica desplegar su aplicación completamente funcional utilizando flujos de trabajo en contenedores en back4app requisitos previos antes de comenzar, asegúrese de tener node js y npm instalados en su máquina verifique las instalaciones con node v y npm v conocimientos básicos de astro , incluyendo enrutamiento basado en archivos y creación de componentes una cuenta de back4app para gestionar sus servicios backend regístrese en back4app https //www back4app com/ si aún no lo ha hecho con estos requisitos previos en su lugar, está listo para comenzar a construir su proyecto configuración del proyecto comienza configurando tu entorno de desarrollo local e inicializando un nuevo proyecto de astro asegúrate de tener node js (versión lts) instalado si no, descárgalo desde nodejs org https //nodejs org/ crea tu proyecto de astro ejecutando npm create astro\@latest todo app navega a tu directorio de proyecto cd todo app inicia el servidor de desarrollo para verificar la configuración npm run dev tu aplicación astro ahora debería abrirse en tu navegador con tu frontend listo, procede a crear tu backend en back4app creando el backend de todo back4app ofrece un servicio de backend completamente gestionado impulsado por parse , que incluye una base de datos nosql, autenticación, cloud code y apis autogeneradas sigue estos pasos para configurar tu 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, todoapp ) y selecciona nodejs/parse como el tipo de backend navega a "base de datos" > "navegador" , haz clic en "crear una clase" , y elige "personalizada" nombra la clase tarea y establece sus permisos para permitir lectura y escritura pública (puedes refinar esto 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 (booleano) – estado de finalización de la tarea fechadevencimiento (fecha) – la fecha límite para la tarea haz clic en "guardar" para crear el esquema integrando back4app con astro usarás el parse javascript sdk para conectar tu aplicación astro al backend de back4app instala el sdk de parse npm install parse configura el sdk creando un módulo dedicado por ejemplo, crea un archivo en src/lib/parseclient js con el siguiente contenido 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 puedes importar este módulo en tus componentes o páginas de astro para interactuar con el backend desarrollando el frontend tu aplicación astro consistirá en componentes y páginas para agregar, mostrar, actualizar y eliminar tareas usa el enrutamiento basado en archivos de astro y componentes para construir una lista de tareas dinámica estructurando tus componentes para crear tu frontend, harás uso de solid js para usar solid js en astro, instala el paquete solid js así npm install solid js crea una src/components carpeta para organizar tus componentes de ui mkdir src/components crearás los siguientes componentes taskformsolid jsx – para agregar nuevas tareas taskitemsolid jsx – para representar tareas individuales tasklistsolid jsx – para mostrar la lista de tareas todoapp jsx – para mostrar la aplicación completa taskformsolid jsx este componente renderiza un formulario que captura los detalles de la tarea y los envía 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 este componente representa una tarea individual, proporcionando botones para alternar su estado de finalización o eliminar la tarea // 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 este componente muestra una lista de tareas iterando sobre un array y renderizando cada 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 este componente importa y muestra los otros componentes muestra toda la aplicación // 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} /> \</> ); } integración de página en tu página principal (por ejemplo, src/pages/index astro ), gestiona el estado de las tareas e integra tus componentes \ // 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> estilizando la aplicación para agregar estilos básicos globales, agrega los estilos css a continuación al layouts astro archivo en el src/layouts directorio 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; } } ahora agrega el is\ global atributo a la etiqueta de estilo \<!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> desplegando el frontend en back4app web deployment back4app web deployment proporciona un entorno containerizado para alojar tu aplicación astro generar la construcción de producción npm run build creando un dockerfile crea un dockerfile en la raíz de tu proyecto con el siguiente contenido \# 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"] probando el contenedor de docker localmente construye tu imagen de docker docker build t todo frontend ejecuta el contenedor docker run p 3000 3000 todo frontend abre http //localhost 3000 en tu navegador para verificar que tu aplicación astro se sirva correctamente desplegando a back4app inicializa un repositorio de git, agrega tus archivos de proyecto y haz un 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 inicia sesión en back4app web deployment https //www back4app com/containers haz clic en "crear nueva aplicación" , proporciona el nombre de tu proyecto y selecciona tu repositorio de github autoriza a back4app y elige despliegue de dockerfile confirma la configuración de la construcción y haz clic en "desplegar" para iniciar el despliegue monitoreo de tu despliegue después del despliegue, utiliza el panel de control de back4app para ver registros para depuración monitorear el rendimiento del contenedor y el uso de recursos activar reconstrucciones en nuevos compromisos configurar dominios personalizados si es necesario accede a tu aplicación en vivo en https //todoapp ku5ofg8s b4a run/ https //todoapp ku5ofg8s b4a run/ https //todoapp ku5ofg8s b4a run/ pruebas y depuración después del despliegue, confirma que tu frontend de astro se comunica correctamente con el backend de back4app verificación de api usa las herramientas de desarrollador de tu navegador (f12 → red) para inspeccionar las llamadas a la api operaciones de tareas agrega, completa y elimina tareas a través de la interfaz de usuario y verifica las actualizaciones en el navegador de base de datos de back4app manejo de errores revisa los registros de la consola en busca de errores y prueba casos límite como envíos vacíos pruebas de rendimiento simula condiciones de red lentas utilizando herramientas del navegador para evaluar la capacidad de respuesta mejores prácticas para usar back4app con astro para optimizar tu aplicación solicitudes eficientes usa operaciones por lotes al manejar múltiples tareas const tasks = \[task1, task2, task3]; parse object saveall(tasks); consultas optimizadas recuperar solo los campos necesarios query select('title', 'completed'); gestión del entorno almacenar claves sensibles en variables de entorno astro parse app id=your app id astro parse js key=your js key seguridad usar acls para restringir el acceso task setacl(new parse acl(parse user current())); descarga de backend aprovechar el código en la nube para lógica compleja y reducir la exposición de la api conclusión ahora has construido una aplicación de lista de tareas de pila completa creando un frontend de astro, integrándolo con el backend de back4app y desplegándolo utilizando flujos de trabajo en contenedores este tutorial te guió a través de cada paso, desde el desarrollo local hasta el despliegue en la nube, asegurando una interacción fluida entre tu interfaz de usuario de astro y los servicios de backend mirando hacia adelante, considera mejoras como actualizaciones en tiempo real, autenticación mejorada e integraciones de terceros para seguir aprendiendo, visita la documentación de back4app https //www back4app com/docs y explora recursos de la comunidad