Introdução
Neste tutorial, você aprenderá a desenvolver um aplicativo de lista de tarefas em tempo real utilizando JavaScript, Node.js e Socket.io. O objetivo é criar uma aplicação onde usuários possam adicionar, editar e remover tarefas instantaneamente, sem a necessidade de recarregar a página. Durante o processo, abordaremos todos os componentes necessários, incluindo a configuração do servidor Node.js, a implementação do Socket.io para comunicação em tempo real e a construção da interface do usuário com HTML e JavaScript. Além disso, vamos explorar testes básicos para garantir que a aplicação funcione conforme o esperado. Este é um guia prático que ajudará desenvolvedores a entender como construir e integrar funcionalidades em tempo real em suas aplicações web.
Etapas
Configuração do Ambiente de Desenvolvimento
Certifique-se de ter o Node.js instalado em sua máquina. Você pode baixar a versão mais recente no site oficial do Node.js. Após a instalação, verifique a versão instalada utilizando o seguinte comando:
commands# Verificar versão do Node.js
node -vCriação do Projeto Node.js
Crie um novo diretório para o seu projeto e inicialize um novo projeto Node.js. Execute os comandos abaixo para criar o diretório e inicializar o projeto:
commands# Criar diretório do projeto
mkdir lista-de-tarefas
cd lista-de-tarefas
# Inicializar o projeto
npm init -yInstalação das Dependências
Instale as dependências necessárias, incluindo o Express para o servidor e o Socket.io para comunicação em tempo real:
commandsnpm install express socket.io
Configuração do Servidor Express
Crie um arquivo chamado `server.js` no diretório do projeto. Este arquivo conterá a configuração do servidor Express e a integração com o Socket.io. Insira o seguinte código no arquivo:
server.jsconst express = require('express'); const http = require('http'); const socketIo = require('socket.io'); const app = express(); const server = http.createServer(app); const io = socketIo(server); app.use(express.static('public')); app.get('/', (req, res) => { res.sendFile(__dirname + '/public/index.html'); }); io.on('connection', (socket) => { console.log('Novo usuário conectado'); socket.on('nova_tarefa', (tarefa) => { io.emit('nova_tarefa', tarefa); }); socket.on('remover_tarefa', (tarefaId) => { io.emit('remover_tarefa', tarefaId); }); }); const PORT = process.env.PORT || 3000; server.listen(PORT, () => { console.log(`Servidor rodando na porta ${PORT}`); });
Criação da Interface do Usuário
Crie uma pasta chamada `public` e dentro dela, crie um arquivo `index.html`. Neste arquivo, você irá construir a interface da aplicação de lista de tarefas. Insira o seguinte código:
index.html<!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Lista de Tarefas</title> <script src="https://cdn.socket.io/4.0.0/socket.io.min.js"></script> </head> <body> <h1>Lista de Tarefas</h1> <input id="tarefaInput" type="text" placeholder="Adicione uma nova tarefa..."> <button id="adicionarBtn">Adicionar</button> <ul id="listaTarefas"></ul> <script> const socket = io(); const listaTarefas = document.getElementById('listaTarefas'); const tarefaInput = document.getElementById('tarefaInput'); const adicionarBtn = document.getElementById('adicionarBtn'); adicionarBtn.addEventListener('click', () => { const tarefa = tarefaInput.value; if (tarefa) { socket.emit('nova_tarefa', tarefa); tarefaInput.value = ''; } }); socket.on('nova_tarefa', (tarefa) => { const li = document.createElement('li'); li.textContent = tarefa; listaTarefas.appendChild(li); }); </script> </body> </html>
Testando a Aplicação
Execute o servidor para iniciar sua aplicação. Utilize o comando abaixo e acesse `http://localhost:3000` no seu navegador:
commandsnode server.js
Melhorando a Aplicação com Remoção de Tarefas
Para permitir que os usuários removam tarefas, você deve modificar o código da `index.html` para adicionar a funcionalidade de remoção. Atualize o código do arquivo `index.html` para incluir o seguinte:
updated_index.html<!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Lista de Tarefas</title> <script src="https://cdn.socket.io/4.0.0/socket.io.min.js"></script> </head> <body> <h1>Lista de Tarefas</h1> <input id="tarefaInput" type="text" placeholder="Adicione uma nova tarefa..."> <button id="adicionarBtn">Adicionar</button> <ul id="listaTarefas"></ul> <script> const socket = io(); const listaTarefas = document.getElementById('listaTarefas'); const tarefaInput = document.getElementById('tarefaInput'); const adicionarBtn = document.getElementById('adicionarBtn'); adicionarBtn.addEventListener('click', () => { const tarefa = tarefaInput.value; if (tarefa) { socket.emit('nova_tarefa', tarefa); tarefaInput.value = ''; } }); socket.on('nova_tarefa', (tarefa) => { const li = document.createElement('li'); li.textContent = tarefa; const btnRemover = document.createElement('button'); btnRemover.textContent = 'Remover'; btnRemover.onclick = () => { socket.emit('remover_tarefa', tarefa); li.remove(); }; li.appendChild(btnRemover); listaTarefas.appendChild(li); }); </script> </body> </html>
Implementação de Testes Básicos
Para garantir a funcionalidade da aplicação, crie um arquivo de teste básico. Crie uma pasta chamada `tests` e dentro dela crie um arquivo `test.js`. Insira o seguinte código para realizar testagens manuais da aplicação:
test.js// Este arquivo é para teste manual da aplicação. // Verifique se a aplicação está respondendo como esperado usando o navegador e o console. console.log('Teste manual: Inicie o servidor e acesse a aplicação no navegador.');
Conclusão
Neste tutorial, você aprendeu a construir um aplicativo de lista de tarefas em tempo real utilizando JavaScript, Node.js e Socket.io. Iniciamos com a configuração do ambiente e a construção do servidor, seguido pela implementação de uma interface simples onde usuários podem adicionar e remover tarefas. Além disso, abordamos a importância de testar o aplicativo. Com esse conhecimento, você está preparado para criar aplicações interativas e dinâmicas que utilizam comunicação em tempo real.