Quickstarters
Como Construir um Frontend Astro e Conectá-lo a um Backend?
34 min
neste tutorial, você construirá um aplicativo de lista de tarefas usando astro e o conectará a um serviço de backend gerenciado alimentado pelo back4app este guia é projetado para você se deseja dominar operações crud essenciais (criar, ler, atualizar, excluir) enquanto constrói um frontend moderno e estático com dados dinâmicos usando astro ao final deste tutorial, seu aplicativo interagirá perfeitamente com um backend que gerencia armazenamento de dados, autenticação e muito mais desenvolver um aplicativo full stack pode ser desafiador devido à configuração do backend e ao gerenciamento de banco de dados para simplificar seu processo, usamos o back4app— um robusto backend as a service —para que você possa se concentrar em criar um frontend astro rápido e leve o back4app fornece um banco de dados nosql totalmente gerenciado, autenticação de usuários, cloud code para lógica personalizada e sdks para integração perfeita isso permite que você construa e implante aplicativos escaláveis sem gerenciar a infraestrutura do servidor principais conclusões ao seguir este tutorial, você irá inicializar um projeto moderno astro com vite integrar um serviço de backend para gerenciar os dados da sua aplicação implementar operações crud essenciais para uma lista de tarefas dinâmica implantar sua aplicação totalmente funcional usando fluxos de trabalho em contêiner no back4app pré requisitos antes de começar, certifique se de que você tem node js e npm instalados na sua máquina verifique as instalações com node v e npm v conhecimento básico de astro , incluindo roteamento baseado em arquivos e criação de componentes uma conta no back4app para gerenciar seus serviços de backend inscreva se em back4app https //www back4app com/ se você ainda não tiver com esses pré requisitos em vigor, você está pronto para começar a construir seu projeto configuração do projeto comece configurando seu ambiente de desenvolvimento local e inicializando um novo projeto astro certifique se de que você tem node js (versão lts) instalado se não, baixe o de nodejs org https //nodejs org/ crie seu projeto astro executando npm create astro\@latest todo app navegue até o diretório do seu projeto cd todo app inicie o servidor de desenvolvimento para verificar a configuração npm run dev seu aplicativo astro deve agora abrir no seu navegador com seu frontend pronto, prossiga para criar seu backend no back4app criando o backend todo back4app oferece um serviço de backend totalmente gerenciado, alimentado por parse , que inclui um banco de dados nosql, autenticação, cloud code e apis geradas automaticamente siga estas etapas para configurar seu backend faça login na sua painel do back4app https //www back4app com/ e clique "criar um novo app " nomeie seu app (por exemplo, todoapp ) e selecione nodejs/parse como o tipo de backend navegue até "banco de dados" > "navegador" , clique "criar uma classe" , e escolha "personalizado" nomeie a classe tarefa e defina suas permissões para permitir leitura e escrita públicas (você pode refinar isso mais tarde) na classe tarefa , adicione os seguintes campos título (string) – o título da tarefa descrição (string) – detalhes sobre a tarefa concluída (boolean) – status de conclusão da tarefa datadevencimento (data) – o prazo para a tarefa clique "salvar" para criar o esquema integrando o back4app com astro você usará o parse javascript sdk para conectar seu aplicativo astro ao backend do back4app instale o parse sdk npm install parse configure o sdk criando um módulo dedicado por exemplo, crie um arquivo em src/lib/parseclient js com o seguinte conteúdo 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; agora você pode importar este módulo em seus componentes ou páginas astro para interagir com o backend desenvolvendo o frontend sua aplicação astro consistirá em componentes e páginas para adicionar, exibir, atualizar e excluir tarefas use o roteamento baseado em arquivos e componentes do astro para construir uma lista de tarefas dinâmica estruturando seus componentes para criar seu frontend, você usará o solid js para usar o solid js no astro, instale o pacote solid js assim npm install solid js crie uma src/components pasta para organizar seus componentes de ui mkdir src/components você criará os seguintes componentes taskformsolid jsx – para adicionar novas tarefas taskitemsolid jsx – para representar tarefas individuais tasklistsolid jsx – para exibir a lista de tarefas todoapp jsx – para exibir a aplicação completa taskformsolid jsx este componente renderiza um formulário que captura os detalhes da tarefa e os envia para o 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 uma tarefa individual, fornecendo botões para alternar seu status de conclusão ou excluir a tarefa // 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 exibe uma lista de tarefas iterando sobre um array e 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 e exibe os outros componentes ele exibe toda a aplicação // 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} /> \</> ); } integração de página na sua página principal (por exemplo, src/pages/index astro , gerencie o estado das tarefas e integre seus 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 a aplicação para adicionar estilos básicos globais, adicione os estilos css abaixo ao arquivo layouts astro no diretório src/layouts 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; } } agora adicione o atributo is\ global à tag 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> implantando o frontend no back4app web deployment o back4app web deployment fornece um ambiente containerizado para hospedar sua aplicação astro gere o build de produção npm run build criando um dockerfile crie um dockerfile na raiz do seu projeto com o seguinte conteúdo \# 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"] testando o contêiner docker localmente construa sua imagem docker docker build t todo frontend execute o contêiner docker run p 3000 3000 todo frontend abra http //localhost 3000 no seu navegador para verificar se seu aplicativo astro está sendo servido corretamente implantando no back4app inicialize um repositório git, adicione seus arquivos de projeto e faça um 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 faça login no back4app web deployment https //www back4app com/containers clique "criar novo app" , forneça o nome do seu projeto e selecione seu repositório do github autorize o back4app e escolha implantação do dockerfile confirme as configurações de build e clique "implantar" para iniciar a implantação monitorando sua implantação após a implantação, use o painel do back4app para ver logs para depuração monitorar o desempenho do contêiner e o uso de recursos acionar reconstruções em novos commits configurar domínios personalizados, se necessário acesse seu aplicativo ao vivo em https //todoapp ku5ofg8s b4a run/ https //todoapp ku5ofg8s b4a run/ https //todoapp ku5ofg8s b4a run/ testes e depuração após a implantação, confirme que seu frontend astro se comunica corretamente com o backend back4app verificação da api use as ferramentas de desenvolvedor do seu navegador (f12 → rede) para inspecionar chamadas de api operações de tarefas adicione, complete e exclua tarefas pela interface do usuário e verifique as atualizações no navegador de banco de dados back4app tratamento de erros verifique os logs do console em busca de erros e teste casos extremos, como envios vazios teste de desempenho simule condições de rede lentas usando ferramentas do navegador para avaliar a capacidade de resposta melhores práticas para usar back4app com astro para otimizar seu aplicativo requisições eficientes use operações em lote ao lidar com várias tarefas const tasks = \[task1, task2, task3]; parse object saveall(tasks); consultas otimizadas recupere apenas os campos necessários query select('title', 'completed'); gerenciamento de ambiente armazene chaves sensíveis em variáveis de ambiente astro parse app id=your app id astro parse js key=your js key segurança use acls para restringir o acesso task setacl(new parse acl(parse user current())); descarregamento de backend aproveite o cloud code para lógica complexa para reduzir a exposição da api conclusão você agora construiu uma aplicação de lista de tarefas full stack criando um frontend astro, integrando o com o backend do back4app e implantando o usando fluxos de trabalho em contêiner este tutorial guiou você por cada etapa—desde o desenvolvimento local até a implantação na nuvem—garantindo uma interação perfeita entre sua interface astro e os serviços de backend olhando para o futuro, considere melhorias como atualizações em tempo real, autenticação aprimorada e integrações de terceiros para mais aprendizado, visite a documentação do back4app https //www back4app com/docs e explore recursos da comunidade