Quickstarters
How to Build a Blitz.js Frontend and Connect It to a Backend?
22 min
en esta guía, construirás una aplicación de lista de tareas utilizando blitz js y la conectarás a un backend gestionado en back4app este tutorial paso a paso está diseñado para ayudarte a implementar operaciones crud esenciales y crear una interfaz de usuario dinámica utilizando blitz js construir una aplicación de pila completa puede ser complejo si debes gestionar tanto los sistemas frontend como backend al aprovechar back4app, puedes simplificar la gestión del backend a través de un baas escalable , lo que te permite concentrarte en construir una interfaz atractiva de blitz js back4app proporciona un conjunto de servicios de backend, incluyendo una base de datos nosql lista para usar, autenticación, funciones en la nube y puntos finales de api estas características te permiten desarrollar y desplegar tu aplicación rápidamente sin la carga del mantenimiento del servidor conclusiones clave al final de este tutorial, podrás configurar un proyecto moderno de blitz js utilizando herramientas estándar de la industria integrar un backend de back4app con tu aplicación de blitz js utilizando el sdk de parse implementar operaciones crud para gestionar tu lista de tareas contenerizar y desplegar tu aplicación de blitz js utilizando el despliegue web de back4app requisitos previos antes de comenzar, asegúrate de tener lo siguiente node js y npm instalados en tu máquina verifica la instalación con node v y npm v en tu terminal conocimientos básicos de blitz js , incluyendo enrutamiento, consultas y mutaciones familiaridad con react es beneficiosa ya que blitz js se basa en ello 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 estos requisitos previos cumplidos, estás listo para inicializar tu proyecto blitz js e integrarlo con un backend robusto configuración del proyecto comienza configurando tu aplicación blitz js blitz js proporciona una experiencia de desarrollo simplificada al combinar el poder de next js con un marco de trabajo de pila completa ejecuta el siguiente comando para crear un nuevo proyecto blitz js reemplaza todo app con el nombre de proyecto que elijas npx blitz new todo app navega a tu directorio de proyecto cd todo app ejecuta tu servidor de desarrollo para verificar que todo esté configurado correctamente npm run dev visita la url mostrada en tu terminal para confirmar que tu aplicación blitz js está en funcionamiento configurando el backend de todo en back4app back4app ofrece un backend parse gestionado que simplifica la gestión de datos para tu aplicación en esta sección, crearás un modelo de datos para almacenar tareas para tu 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 " proporciona un nombre para tu aplicación (por ejemplo, todoblitzapp ) y selecciona nodejs/parse como el tipo de backend en la "base de datos" > "navegador" sección, haz clic en "crear una clase" y selecciona "personalizada " nombra la clase tarea y establece los permisos de nivel de clase para permitir lectura y escritura pública (puedes ajustar estos ajustes más tarde) agrega los siguientes campos a la tarea clase título (string) – el título de la tarea descripción (string) – detalles sobre la tarea completado (boolean) – si la tarea está terminada fechadevencimiento (fecha) – la fecha límite para la tarea haz clic en "guardar" para crear el esquema integrando back4app con blitz js para conectar tu aplicación blitz js a back4app, instala el sdk de javascript de parse npm install parse a continuación, configura el sdk de parse en tu proyecto blitz js crea un nuevo archivo de configuración (por ejemplo, src/parseclient js ) e inicializa parse como se muestra a continuación reemplaza los marcadores de posición con tus credenciales de back4app de configuración de la aplicación > seguridad y claves // src/parseclient 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 puedes importar esta configuración en tus consultas y mutaciones de blitz js para interactuar con tu backend construyendo el frontend con blitz js con el backend configurado, es hora de construir la interfaz de la lista de tareas en blitz js utilizarás las consultas y mutaciones integradas de blitz js para realizar operaciones crud estructurando tus páginas y llamadas a la api en blitz js, las páginas se encuentran en el src/pages directorio abre src/pages/index tsx y agrega el siguiente código para configurar la página, consultar tareas desde back4app y definir mutaciones para agregar, alternar y eliminar tareas // src/pages/index tsx import layout from "src/core/layouts/layout" import { blitzpage } from "@blitzjs/next" import { usequery } from "@tanstack/react query" import parse from " /parseclient" import { usestate } from "react" const fetchtasks = async () => { const task = parse object extend("task") const query = new parse query(task) const results = await query find() return results map((task) => ({ id task id, task tojson() })) } const addtask = async (title string, description string) => { 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() } const toggletask = async (id string, currentstatus boolean) => { const task = parse object extend("task") const query = new parse query(task) const task = await query get(id) task set("completed", !currentstatus) await task save() } const deletetask = async (id string) => { const task = parse object extend("task") const query = new parse query(task) const task = await query get(id) await task destroy() } const home blitzpage = () => { const { data tasks, refetch, isloading } = usequery(\["tasks"], fetchtasks) const \[title, settitle] = usestate("") const \[description, setdescription] = usestate("") if (isloading) return \<div>loading \</div> return ( \<layout title="home"> \<div classname="container"> \<h1>to do list\</h1> \<form onsubmit={async (e) => { e preventdefault() await addtask(title, description) settitle("") setdescription("") await refetch() }} classname="form" \> \<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> \<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> \<button onclick={async () => { await toggletask(task id, task completed) await refetch() }} \> {task completed ? "undo" "complete"} \</button> \<button onclick={async () => { await deletetask(task id) await refetch() }} \> delete \</button> \</div> )) )} \</div> \</div> \</layout> ) } export default home esta página aprovecha los ganchos de consulta de tanstack para obtener tareas y manejar acciones del usuario, asegurando una integración fluida con tu backend de back4app para asegurar que el usequery funcione, necesitas envolver toda tu aplicación en un queryclientprovider haces esto en el src/pages/ app tsx archivo reemplaza el código en el src/pages/ app tsx archivo con el bloque de código a continuación // src/pages/ app tsx import { errorfallbackprops, errorcomponent, errorboundary, appprops } from "@blitzjs/next" import react from "react" import { withblitz } from "src/blitz client" import { queryclient, queryclientprovider } from "@tanstack/react query" const queryclient = new queryclient() function rooterrorfallback({ error } errorfallbackprops) { return ( \<errorcomponent statuscode={(error as any)? statuscode || 400} title={error message || error name} /> ) } function myapp({ component, pageprops } appprops) { const getlayout = component getlayout || ((page) => page) return ( \<queryclientprovider client={queryclient}> \<errorboundary fallbackcomponent={rooterrorfallback}> {getlayout(\<component { pageprops} />)} \</errorboundary> \</queryclientprovider> ) } export default withblitz(myapp) añadiendo estilos globales para definir el estilo básico de tu aplicación, agrega el bloque de código al archivo css en src/styles/globals css / src/styles/globals 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 tus estilos globales agregando la siguiente línea en src/pages/ app tsx (o tu archivo de componente app personalizado) / src/pages/ app tsx / import " /styles/globals css"; tu aplicación blitz js ahora muestra una interfaz de lista de tareas completamente funcional integrada con back4app contenerizando y desplegando tu aplicación blitz js en back4app el despliegue web de back4app proporciona un entorno containerizado que simplifica el proceso de despliegue empaquetarás tu aplicación blitz js en un contenedor docker y la desplegarás sin problemas preparando tu aplicación blitz js para producción primero, construye tu aplicación blitz js para producción blitz build creando un dockerfile crea un dockerfile en el directorio raíz de tu proyecto con el siguiente contenido from node 18 arg database url arg port=3000 env database url ${database url} workdir /usr/src/app copy package json / run npm install run npm install g blitz copy run blitz build expose 3000 cmd \["blitz", "start", " p", "3000"] este dockerfile construye tu proyecto blitz js y prepara una imagen de producción utilizando un entorno de ejecución de node js ligero después de crear tu dockerfile, crea un dockerignore archivo y copia y pega tu gitignore archivo construyendo y probando tu contenedor docker construye la imagen de docker localmente docker build t todo blitz frontend ejecuta el contenedor para probarlo docker run p 3000 3000 todo blitz frontend visita http //localhost 3000 en tu navegador para verificar que tu aplicación blitz js está funcionando correctamente desplegando tu aplicación a través de back4app web deployment 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, inicia sesión en back4app web deployment https //www back4app com/containers y sigue estos pasos haz clic en "crear nueva aplicación" y ingresa los detalles de tu proyecto elige repositorio de github y autoriza a back4app selecciona tu todo blitz repositorio elige despliegue de dockerfile y verifica la configuración de la construcción haz clic en "desplegar" para iniciar el proceso de despliegue una vez desplegado, utiliza el panel de control de back4app para monitorear registros, gestionar construcciones y configurar dominios personalizados si es necesario pruebas y depuración de tu aplicación después del despliegue, asegúrate de que tu aplicación funcione como se espera verificando la conectividad de la api utiliza las herramientas de desarrollador de tu navegador para verificar que las solicitudes de api para agregar, alternar y eliminar tareas sean exitosas verificando la persistencia de datos agrega tareas a través de la interfaz de usuario y actualiza la página para confirmar que se guardan en la base de datos de back4app probando operaciones crud valida que las tareas se puedan alternar y eliminar, e inspecciona los registros de la consola en busca de errores manejando casos extremos intenta enviar entradas no válidas para probar la solidez de tus validaciones mejores prácticas y consejos de optimización considera las siguientes recomendaciones para una aplicación segura y eficiente optimiza las solicitudes de api utiliza procesamiento por lotes y limita los campos consultados para reducir la sobrecarga de red asegura las variables de entorno almacena credenciales sensibles (id de aplicación y clave de javascript) en un archivo seguro env implementa control de acceso utiliza acls dinámicas para asegurar que solo los usuarios autorizados puedan modificar datos aprovecha el código en la nube descarga la lógica compleja al código en la nube de back4app para mejorar el rendimiento y la seguridad conclusión ahora has construido una aplicación de lista de tareas de pila completa utilizando blitz js integrado con un backend de back4app este tutorial te guió a través de la inicialización del proyecto, la integración del backend y el despliegue en contenedores a medida que avanzas, considera expandir tu aplicación con características como gestión avanzada de usuarios, actualizaciones en tiempo real e integraciones de terceros para obtener más información, explora la documentación de back4app https //www back4app com/docs y los recursos de blitz js