Quickstarters
Como Construir um Frontend Remix e Conectá-lo a um Backend?
22 min
neste tutorial, você construirá um aplicativo de lista de tarefas usando remix e o conectará a um serviço de backend gerenciado no back4app este guia passo a passo foi projetado para ajudá lo a dominar operações crud essenciais e a projetar uma interface de usuário dinâmica usando remix construir um aplicativo full stack envolve configurar tanto um frontend quanto um backend ao usar o back4app, você pode aproveitar um backend como serviço (baas) escalável, para que você possa se concentrar em criar uma experiência de usuário atraente sem se perder na configuração do servidor o back4app fornece um banco de dados pronto para uso, autenticação, funções em nuvem e sdks para integração perfeita com essas capacidades, você pode rapidamente prototipar, construir e implantar seu aplicativo remix principais conclusões ao seguir este tutorial, você irá inicializar um projeto moderno remix usando ferramentas padrão da indústria conectar seu frontend remix a um backend back4app usando o sdk parse implementar operações crud para gerenciar sua https //todoapp ku5ofg8s b4a run/ containerizar seu aplicativo remix e implantá lo via back4app web deployment pré requisitos antes de começar, certifique se de ter o seguinte node js e npm instalados em seu sistema verifique executando node v e npm v no seu terminal conhecimento básico de remix , incluindo roteamento, carregadores e ações familiaridade com conceitos do react é útil, pois o remix se baseia no react uma conta no back4app para configurar e gerenciar seus serviços de backend inscreva se em https //www back4app com/ se você ainda não tiver com essas ferramentas em mãos, você está pronto para criar seu aplicativo remix e integrá lo a um backend robusto configuração do projeto primeiro, configure seu ambiente de desenvolvimento local e inicialize seu projeto remix isso garantirá que você tenha uma base limpa e eficiente para sua aplicação comece instalando o projeto remix usando o seguinte comando substitua todo app pelo nome do seu projeto desejado npx create remix\@latest todo app navegue até o diretório do seu novo projeto cd todo app execute o servidor de desenvolvimento para verificar se tudo está funcionando npm run dev abra a url fornecida no seu terminal para confirmar que seu aplicativo remix está rodando com sucesso configurando o backend todo no back4app back4app oferece um backend gerenciado poderoso alimentado pelo parse você criará um modelo de dados para suas tarefas, que servirá como a espinha dorsal do seu aplicativo de lista de tarefas criando seu aplicativo backend faça login no seu https //www back4app com/ e clique "criar um novo app " nomeie seu aplicativo (por exemplo, todoremixapp ) e selecione nodejs/parse como o tipo de backend na seção "banco de dados" > "navegador" clique em "criar uma classe" e escolha "personalizado " nomeie a classe tarefa e defina suas permissões de nível de classe para permitir leitura e escrita públicas (você pode refinar essas configurações mais tarde) adicione os seguintes campos à classe tarefa título (string) – o nome da tarefa descrição (string) – detalhes sobre a tarefa concluída (boolean) – indica se a tarefa está concluída datadevencimento (data) – prazo para a tarefa clique em "salvar" para finalizar o esquema integrando back4app com remix você usará o sdk javascript do parse para conectar seu aplicativo remix com o back4app instale o sdk executando npm install parse em seguida, configure o parse dentro do seu aplicativo remix abra o arquivo app/root tsx e adicione o seguinte código de inicialização no topo substitua 'your application id' e 'your javascript key' pelas suas credenciais do painel do back4app (em configurações do app > segurança e chaves ) // app/root tsx import parse from "parse"; import react from "react"; 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 as any) serverurl = parse server url; para garantir que o parse esteja totalmente inicializado quando sua função de carregamento for executada, especialmente no lado do servidor adicione este código à sua layout função no arquivo root tsx // app/root tsx export function layout({ children } { children react reactnode }) { react useeffect(() => { if (typeof window !== 'undefined') { parse initialize(parse app id, parse js key); (parse as any) serverurl = "https //parseapi back4app com/"; } }, \[]); // rest of the layout function } esta configuração permite que suas rotas e ações do remix interajam com seu backend do back4app de forma integrada construindo o frontend com remix com seu backend configurado, você agora construirá a interface da lista de tarefas usando o remix isso envolve criar rotas, carregadores e ações para lidar com a busca e mutações de dados estruturando suas rotas no remix, cada rota corresponde a um arquivo na app/routes diretório abra app/routes/ index tsx e adicione o seguinte código para definir a estrutura da página e as operações de dados // app/routes/ index tsx import { json, redirect } from "@remix run/node"; import { useloaderdata, form } from "@remix run/react"; import as parse from "parse"; export const loader = async () => { if (typeof window === "undefined") { try { const response = await fetch( "https //parseapi back4app com/classes/task", { headers { "x parse application id" "your application id", "x parse javascript key" "your javascript key", }, } ); const data = await response json(); return json({ tasks data results map((task) => ({ id task objectid, task })), }); } catch (error) { console error("error fetching tasks ", error); return json({ tasks \[] }); } } else { try { const task = parse object extend("task"); const query = new parse query(task); const results = await query find(); const tasks = results map((task) => ({ id task id, task tojson() })); return json({ tasks }); } catch (error) { console error("error fetching tasks ", error); return json({ tasks \[] }); } } }; export const action = async ({ request }) => { const formdata = await request formdata(); const actiontype = formdata get("actiontype"); // parse server details const parseserverurl = "https //parseapi back4app com"; const headers = { "x parse application id" "your application id", "x parse javascript key" "your javascript key", "content type" "application/json", }; try { if (actiontype === "add") { const title = formdata get("title"); const description = formdata get("description"); // create task using rest api const response = await fetch(`${parseserverurl}/classes/task`, { method "post", headers, body json stringify({ title, description, completed false, }), }); if (!response ok) { throw new error(`failed to add task ${response status}`); } } else if (actiontype === "toggle") { const id = formdata get("id"); // first get the current task to check its completed status const getresponse = await fetch(`${parseserverurl}/classes/task/${id}`, { headers, }); if (!getresponse ok) { throw new error(`failed to get task ${getresponse status}`); } const task = await getresponse json(); const updateresponse = await fetch( `${parseserverurl}/classes/task/${id}`, { method "put", headers, body json stringify({ completed !task completed, }), } ); if (!updateresponse ok) { throw new error(`failed to update task ${updateresponse status}`); } } else if (actiontype === "delete") { const id = formdata get("id"); const deleteresponse = await fetch( `${parseserverurl}/classes/task/${id}`, { method "delete", headers, } ); if (!deleteresponse ok) { throw new error(`failed to delete task ${deleteresponse status}`); } } return redirect("/"); } catch (error) { console error("error processing action ", error); return json({ error error message }, { status 400 }); } }; export default function todoroute() { const { tasks } = useloaderdata(); return ( \<div classname="container"> \<h1>to do list\</h1> \<form method="post" classname="form"> \<input type="hidden" name="actiontype" value="add" /> \<input type="text" name="title" placeholder="task title" required /> \<input type="text" name="description" placeholder="description" 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> \<form method="post"> \<input type="hidden" name="actiontype" value="toggle" /> \<input type="hidden" name="id" value={task id} /> \<button type="submit">{task completed ? "undo" "complete"}\</button> \</form> \<form method="post"> \<input type="hidden" name="actiontype" value="delete" /> \<input type="hidden" name="id" value={task id} /> \<button type="submit">delete\</button> \</form> \</div> )) )} \</div> \</div> ); } esta rota usa os carregadores e ações do remix para buscar tarefas do back4app e lidar com interações do usuário, como adicionar, alternar e excluir tarefas estilizando seu app remix crie um arquivo css em app/global css para definir a aparência básica do seu aplicativo / app/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; 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; } } importe o arquivo css em seu app/root tsx adicionando // app/root tsx import " /global css"; seu app remix agora tem uma interface funcional de lista de tarefas que interage com o backend do back4app containerizando e implantando seu app remix no back4app a implantação web do back4app oferece um ambiente containerizado para suas aplicações você irá empacotar seu app remix em um contêiner docker e implantá lo configurando o remix para produção antes de containerizar, construa seu app remix em um pacote pronto para produção npm run build criando um dockerfile crie um dockerfile na raiz do seu projeto com o seguinte conteúdo \# stage 1 build the remix app from node 18 alpine as builder workdir /app copy package json package lock json / run npm install copy run npm run build \# stage 2 serve the app using a lightweight node server from node 18 alpine workdir /app copy from=builder /app/build /build copy from=builder /app/package json / run npm install production expose 3000 cmd \["npm", "run", "start"] este dockerfile constrói seu projeto remix e o prepara para produção usando um runtime node js minimal construindo e testando seu contêiner docker construa sua imagem docker localmente docker build t todo remix frontend execute o contêiner para testar a implantação docker run p 8080 3000 todo remix frontend visite http //localhost 8080 no seu navegador para verificar se seu aplicativo remix está funcionando corretamente implantando via back4app web deployment 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, faça login no https //www back4app com/containers e siga estas etapas clique "criar novo app" e nomeie seu projeto selecione repositório github e autorize o back4app escolha seu repositório todo remix selecione implantação dockerfile e confirme as configurações de build clique "implantar" para iniciar sua build após a implantação, monitore seu contêiner via o painel do back4app você pode visualizar logs, gerenciar builds e configurar domínios personalizados testando e depurando seu aplicativo uma vez implantado, certifique se de que seu aplicativo funcione como esperado aqui está como verificar a integração frontend backend conectividade da api abra o console de desenvolvedor do seu navegador (f12) e verifique as solicitações de rede ao adicionar, alternar ou excluir tarefas persistência de dados adicione tarefas através da interface e atualize a página para confirmar que estão salvas verifique as alterações no navegador de banco de dados back4app sob a classe tarefa operações crud teste a alternância do status de conclusão e a exclusão de tarefas se surgirem problemas, inspecione o console e os logs da api tratamento de casos especiais tente enviar entradas vazias para garantir que suas validações sejam eficazes melhores práticas e dicas de otimização siga estas recomendações para melhorar a segurança, desempenho e escalabilidade otimize chamadas de api use solicitações em lote e selecione apenas os campos necessários nas consultas variáveis de ambiente armazene chaves sensíveis (id do aplicativo e chave javascript) em um env arquivo e faça referência a elas de forma segura controle de acesso implemente acls dinâmicas para restringir modificações de dados a usuários autenticados código em nuvem desloque lógica complexa para o código em nuvem do back4app para melhorar o desempenho e a segurança conclusão você construiu com sucesso um aplicativo de lista de tarefas full stack com remix e o conectou a um backend do back4app este tutorial guiou você na inicialização de um projeto remix, na integração de um serviço de gerenciamento para interações de backend e na containerização de seu aplicativo para implantação agora que seu aplicativo está ao vivo, considere expandir seus recursos com gerenciamento avançado de usuários, atualizações em tempo real ou integrações de terceiros para mais orientações, explore a https //www back4app com/docs e recursos do remix

