Quickstarters
Como Construir um Frontend Qwik e Conectá-lo a um Backend?
32 min
neste tutorial, você construirá um aplicativo de lista de tarefas usando qwik e o conectará a um backend robusto alimentado pelo back4app este guia é voltado para desenvolvedores que desejam aproveitar a resumibilidade e as capacidades de carregamento sob demanda do qwik enquanto integram operações essenciais de crud (criar, ler, atualizar, excluir) com um backend gerenciado ao final, você terá um aplicativo totalmente funcional que demonstra como combinar um frontend moderno do qwik com os serviços de backend confiáveis do back4app construir um aplicativo full stack pode ser desafiador porque envolve configuração de backend, gerenciamento de banco de dados, autenticação e implantação para simplificar essas tarefas, usamos o back4app— um backend como serviço escalável (baas) —para que você possa se concentrar em construir seu aplicativo qwik enquanto ele cuida da hospedagem, bancos de dados e apis o back4app oferece um conjunto abrangente de serviços de backend, incluindo um banco de dados nosql pronto para uso, autenticação, cloud code para lógica do lado do servidor e integrações suaves de sdk seu suporte à implantação em contêineres o torna uma excelente escolha para aplicativos full stack modernos com essas ferramentas ao seu alcance, você pode desenvolver e implantar aplicativos rapidamente, sem a sobrecarga de gerenciar a infraestrutura do servidor principais conclusões ao seguir este tutorial, você aprenderá a inicializar um projeto qwik moderno integrar um serviço de backend para gerenciar os dados da sua aplicação implementar operações crud essenciais para uma interface de usuário interativa implantar uma aplicação de lista de tarefas totalmente funcional usando fluxos de trabalho em contêiner no back4app pré requisitos antes de começar, certifique se de ter o seguinte node js e npm instale a versão lts mais recente de nodejs org https //nodejs org/ e verifique com node v e npm v conhecimento básico de qwik familiaridade com os componentes do qwik, sinais (usando usesignal ) e seu conceito de resumibilidade é recomendada se você é novo no qwik, revise sua documentação primeiro uma conta no back4app inscreva se em back4app https //www back4app com/ para configurar e gerenciar seus serviços de backend com esses pré requisitos em vigor, você está pronto para configurar seu projeto e começar a construir configuração do projeto comece configurando seu ambiente de desenvolvimento local e inicializando seu projeto qwik confirme que node js (versão lts) está instalado node v npm v crie um novo projeto qwik usando o qwik cli execute o seguinte comando npm create qwik\@latest responda às solicitações que o cli fornecer nomeie o projeto como todo app ou substitua por qualquer nome que preferir mude para o diretório do seu projeto cd todo app inicie o servidor de desenvolvimento para verificar sua configuração npm start seu aplicativo qwik deve agora estar rodando localmente abra a url fornecida em seu navegador para confirmar em seguida, você configurará seu backend no back4app para gerenciar o armazenamento de dados e as interações da api criando o backend todo back4app oferece um serviço de backend totalmente gerenciado alimentado por parse este serviço fornece um banco de dados nosql, autenticação, cloud code e apis geradas automaticamente esta seção orienta você na criação de um modelo de dados de tarefa para armazenar seus itens de lista de tarefas e vinculá lo ao seu frontend qwik configurando seu aplicativo de backend faça login na sua painel do back4app https //www back4app com/ e clique em "criar um novo app " nomeie seu aplicativo (por exemplo, todoqwikapp ) e selecione nodejs/parse como o tipo de backend uma vez criado, navegue até "banco de dados" > "navegador" clique em "criar uma classe" e escolha "personalizado" nomeie a classe tarefa e defina as permissões de nível de classe para permitir leitura e escrita públicas (você pode refinar essas configurações 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ído (booleano) – indica se a tarefa está concluída datadevencimento (data) – o prazo para a tarefa clique em "salvar" para finalizar seu esquema integrando o back4app com o qwik integre o back4app ao seu projeto qwik usando o parse javascript sdk instale o sdk via npm npm install parse configure o sdk inicializando o com seu id do aplicativo e chave javascript recupere essas credenciais no seu painel do back4app em configurações do app > segurança & chaves crie um arquivo de configuração (por exemplo, src/lib/parse js ) e adicione o seguinte 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 esta configuração em seus componentes e rotas qwik para interagir com seu backend desenvolvendo o frontend com qwik agora que seu backend está conectado, construa a interface do usuário para seu aplicativo de lista de tarefas usando qwik você criará componentes para adicionar, exibir, atualizar e excluir tarefas enquanto gerencia o estado com sinais qwik organizando seus componentes seu aplicativo incluirá os seguintes componentes principais taskform tsx – um componente para lidar com a adição de novas tarefas tasklist tsx – um componente para exibir todas as tarefas e fornecer controles para marcar tarefas como concluídas ou excluí las taskitem tsx – um componente que representa uma tarefa individual com ações para alternar a conclusão ou removê la crie uma components pasta dentro de src e adicione esses arquivos mkdir src/components touch src/components/taskform tsx src/components/tasklist tsx src/components/taskitem tsx gerenciando o estado com sinais qwik utilize o usesignal do qwik para gerenciamento de estado reativo na sua página principal (por exemplo, src/routes/index tsx ), configure o estado e a busca de dados da seguinte forma import { component$, usesignal, usevisibletask$, $ } from '@builder io/qwik'; import parse from ' /lib/parse js'; import taskform from ' /components/taskform'; import tasklist from ' /components/tasklist'; export default component$(() => { const tasks = usesignal< { id string; createdat string; updatedat string; title string; description string; completed boolean; }\[] \>(\[]); const fetchtasks = $ ( async () => { try { const task = parse object extend("task"); const query = new parse query(task); const results = await query find(); tasks value = results map(task => ({ id task id ?? '', createdat task createdat ? task createdat toisostring() '', updatedat task updatedat ? task updatedat toisostring() '', title task get('title') ?? '', description task get('description') ?? '', completed task get('completed') ?? false, })); } catch (error) { console error("error fetching tasks ", error); } }); usevisibletask$(async () => { await fetchtasks(); }); return ( \<div class="container"> \<h1>to do list\</h1> \<taskform ontaskadded$={fetchtasks} /> \<tasklist tasks={tasks value} ontaskschange$={fetchtasks} /> \</div> ); }); construindo o componente do formulário de tarefas em src/components/taskform tsx , crie um componente de formulário para adicionar tarefas use os sinais reativos do qwik para os inputs do formulário import { component$, usesignal, $, qrl } from '@builder io/qwik'; import parse from ' /lib/parse js'; interface taskformprops { ontaskadded$ qrl<() => void>; } export default component$((props taskformprops) => { const title = usesignal(''); const description = usesignal(''); const handlesubmit$ = $(async (e event) => { e preventdefault(); try { const task = parse object extend("task"); const task = new task(); task set("title", title value); task set("description", description value); task set("completed", false); await task save(); title value = ''; description value = ''; return true; } catch (error) { console error("error adding task ", error); return false; } }); return ( \<form preventdefault\ submit onsubmit$={async (event) => { const success = await handlesubmit$(event); if (success) { await props ontaskadded$(); } }} \> \<input type="text" placeholder="task title" value={title value} oninput$={(e) => title value = (e target as htmlinputelement) value} required /> \<input type="text" placeholder="description" value={description value} oninput$={(e) => description value = (e target as htmlinputelement) value} required /> \<button type="submit">add task\</button> \</form> ); }); construindo a lista de tarefas e os componentes de item em src/components/tasklist tsx , renderize a lista de tarefas import { component$ } from '@builder io/qwik'; import taskitem from ' /taskitem'; interface task { id string; title string; description string; completed boolean; } interface tasklistprops { tasks task\[]; ontaskschange$ () => void; } export default component$((props tasklistprops) => { return ( \<div> {props tasks length === 0 ? ( \<p>no tasks available\</p> ) ( props tasks map(task => ( \<taskitem key={task id} task={task} ontaskschange$={props ontaskschange$} /> )) )} \</div> ); }); em src/components/taskitem tsx , crie um componente para tarefas individuais com ações para alternar a conclusão ou excluir a tarefa import { component$, $ } from '@builder io/qwik'; import parse from ' /lib/parse js'; interface task { id string; title string; description string; completed boolean; } interface taskitemprops { task task; ontaskschange$ () => void; } export default component$((props taskitemprops) => { const handletoggle = $(async () => { try { const query = new parse query("task"); const tasktoupdate = await query get(props task id); tasktoupdate set("completed", !props task completed); await tasktoupdate save(); props ontaskschange$(); } catch (error) { console error("error updating task ", error); } }); const handledelete = $(async () => { try { const query = new parse query("task"); const tasktodelete = await query get(props task id); await tasktodelete destroy(); props ontaskschange$(); } catch (error) { console error("error deleting task ", error); } }); return ( \<div class={`task item ${props task completed ? "completed" ""}`}> \<h3>{props task title}\</h3> \<p>{props task description}\</p> \<button onclick$={handletoggle}> {props task completed ? "undo" "complete"} \</button> \<button onclick$={handledelete}>delete\</button> \</div> ); }); estilizando seu aplicativo crie um src/global css arquivo para adicionar estilos básicos / src/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; 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; } } outro título importe os estilos globais no seu arquivo raiz (por exemplo, src/root tsx ) import " /global css"; finalizando a ui sua aplicação qwik to do list agora possui um frontend dinâmico integrado com back4app e estilização personalizada o aplicativo permite que você adicione, exiba, atualize e exclua tarefas, garantindo uma comunicação suave entre o frontend e o backend em seguida, você implantará sua aplicação qwik usando a plataforma de implantação web do back4app implantando o frontend na implantação web do back4app a implantação web do back4app fornece um ambiente totalmente gerenciado e containerizado para hospedar suas aplicações com implantações baseadas em docker, você pode empacotar seu aplicativo qwik e implantá lo sem problemas adicionar o adaptador do servidor express o qwik permite que você configure adaptadores de implantação para alvos específicos vamos adicionar o adaptador express para servir seu projeto em produção instale o adaptador npm run qwik add em seguida, selecione adaptador servidor node js express e confirme a instalação isso atualiza seu readme e adiciona novos scripts de implantação no seu package json atualize o script de início abra package json e mude o script de início para "start" "node server/entry express" opcionalmente, mantenha um script de desenvolvimento separado, se necessário isso garante que seu projeto use o express para servir a versão de produção configurando o qwik para produção construa seu site qwik pronto para produção com npm run build criando um dockerfile para seu app crie um dockerfile na raiz do projeto para containerizar sua aplicação qwik # build stage from node\ lts alpine as builder user node workdir /home/node copy package json run npm ci copy chown=node\ node run npm run build \# final run stage from node\ lts alpine as runner env node env=production user node workdir /home/node copy from=builder chown=node\ node /home/node/package json copy from=builder chown=node\ node /home/node/node modules /node modules copy from=builder chown=node\ node /home/node/dist /dist copy from=builder chown=node\ node /home/node/server /server arg port expose ${port 3000} cmd \["node", "server/entry express"] fazendo push para o github e implantando via back4app envie seu projeto para o 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 em seguida, implante usando a implantação web do back4app faça login em back4app web deployment https //www back4app com/containers clique "criar novo app" , forneça um nome e selecione repositório do github autorize o back4app a acessar seu repositório e selecione seu repositório do projeto qwik escolha implantação dockerfile e confirme as configurações de build clique "implantar" para iniciar o processo de build monitoramento e gerenciamento de implantações após a implantação, use o painel do back4app para ver logs para solução de problemas monitorar o desempenho do contêiner e o uso de recursos acionar novas implantações quando novos commits forem enviados configurar domínios personalizados, se necessário testando e depurando seu aplicativo uma vez implantado, teste minuciosamente seu aplicativo qwik verifique a conectividade da api abra o console de desenvolvedor do seu navegador (f12 → rede) para verificar chamadas de api durante as operações de tarefa adicionar e recuperar tarefas use a interface para adicionar tarefas, depois atualize para confirmar a persistência dos dados no navegador de banco de dados back4app testar operações crud certifique se de que marcar tarefas como concluídas e a exclusão sejam refletidas corretamente no backend lidar com casos limite valide as entradas do formulário e simule condições de rede lenta usando ferramentas de desenvolvedor se surgirem problemas, revise os logs do back4app ou verifique novamente sua configuração de api melhores práticas para usar os serviços do back4app melhore o desempenho e a segurança do seu aplicativo ao otimizar chamadas de api use solicitações em lote para múltiplas operações e consulte apenas os campos necessários proteger dados sensíveis armazene credenciais como id do aplicativo e chave javascript em variáveis de ambiente no qwik, crie um env arquivo vite parse app id=your app id vite parse js key=your js key ativando auto scaling ative o auto scaling na implantação da web do back4app para gerenciar alto tráfego aprimorando a segurança restringir permissões de nível de classe (clps) para controlar modificações de dados e configurar acls conforme necessário utilizando cloud code descarregue lógica complexa para o cloud code para melhorar o desempenho e reduzir a exposição da api conclusão você agora construiu uma aplicação de lista de tarefas full stack usando qwik para o frontend e os robustos serviços de backend do back4app este tutorial guiou você na configuração de um projeto qwik, na integração do sdk parse e na implantação do seu site usando fluxos de trabalho em contêiner no back4app à medida que você continua desenvolvendo, considere adicionar recursos como autenticação avançada de usuários, atualizações em tempo real e integrações de terceiros para mais informações e suporte, consulte a documentação do back4app https //www back4app com/docs