Consumo de APIs: Dominando Fetch e Axios em JavaScript
Express.js: Guia Completo para Criar Apps Escaláveis
Neste tutorial, vamos explorar Express.js, um framework minimalista para criação de aplicações web no ecossistema Node.jsIntrodução ao Node.js: Servidor e FerramentasDescubra como dominar o Node.js e criar servidores HTTP. Aprenda a instalar, configurar e utilizar o NPM, além de aplicar práticas no desenvolvimento web.. A proposta aqui é guiar você em uma jornada narrativa e prática, mostrando os principais recursos e funcionalidades para que você seja capaz de construir suas próprias aplicações web de forma ágil, organizada e escalável.
O que é Express.js?🔗
O Express.js é um framework para Node.jsIntrodução ao Node.js: Servidor e FerramentasDescubra como dominar o Node.js e criar servidores HTTP. Aprenda a instalar, configurar e utilizar o NPM, além de aplicar práticas no desenvolvimento web. que simplifica a criação de aplicações web e APIs. Entre suas principais características, destacam-se:
- Minimalismo: Focado no essencial para servir requisições HTTP e gerenciar rotas.
- Extensibilidade: Possibilidade de adicionar comportamentos por meio de middlewares (códigos que interceptam requisições para processá-las ou modificá-las).
- Comunidade Ativa: Uma grande variedade de bibliotecas e pacotes de terceiros compatíveis.
Essa combinação faz do Express.js uma das ferramentas mais populares para desenvolvimento de back-end em JavaScriptIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente..
Configuração Inicial e Estrutura de Projeto🔗
Para dar início a um projeto com Express.js, é preciso ter o Node.jsIntrodução ao Node.js: Servidor e FerramentasDescubra como dominar o Node.js e criar servidores HTTP. Aprenda a instalar, configurar e utilizar o NPM, além de aplicar práticas no desenvolvimento web. instalado em seu sistema. Uma vez configurado o ambiente, pode-se criar um novo diretório para o projeto e inicializar o arquivo
package.json
:
mkdir minha-aplicacao-express
cd minha-aplicacao-express
npm init -y
Em seguida, instale a biblioteca do Express.js:
npm install express
Organização de Pastas
Uma organização recomendada e simples para um projeto Express.js pode ser:
minha-aplicacao-express
├── package.json
├── package-lock.json
├── src
│ ├── app.js
│ └── routes
│ └── index.js
└── public
└── css
└── js
- src
Inserindo Imagens: `<img>`, Formatos, `alt` e `title`Aprenda a inserir imagens em HTML utilizando a tag <img> com foco em acessibilidade e performance, explorando atributos, formatos e melhores práticas.: concentra o código-fonte da aplicação.
- app.js: ponto de entrada principal, onde configuramos o servidor e os middlewares.
- routes: diretório opcional para gerenciar as rotas por módulos
Tratamento de Módulos e BundlersDescubra como módulos e bundlers revolucionaram o desenvolvimento JavaScript, promovendo organização, performance e escalabilidade em aplicações modernas. ou funcionalidades.
- public: pasta para arquivos estáticos, como imagens, arquivos CSS e JavaScript
Introdução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente..
Criando o Servidor com Express.js🔗
A base de uma aplicação Express.js inclui a importação do módulo e a criação de um objetoFundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web.
app
. Nesse objetoFundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web., definimos as rotas e, por fim, “subimos” o servidor para ouvir requisições em uma porta definida.
Exemplo de um arquivo app.js
básico:
const express = require('express');
const app = express();
// Exemplo de rota raiz
app.get('/', (req, res) => {
res.send('Olá, Express!');
});
// Subindo o servidor em uma porta específica
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Servidor rodando na porta ${PORT}`);
});
Ao rodar o comando:
node src/app.js
Sua aplicação estará disponível em http://localhost:3000.
Definindo Rotas e Métodos🔗
Uma aplicação web precisa escutar requisições em endpoints específicos. No Express.js, podemos criar rotas para diferentes métodosClasses e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. HTTP, como
GET
, POST
, PUT
, DELETE
.
Exemplos de configurações de rotas:
// Rotas em app.js ou em arquivos separados
app.get('/usuarios', (req, res) => {
res.send('Listar usuários');
});
app.post('/usuarios', (req, res) => {
// Lógica para criar um usuário
res.send('Usuário criado com sucesso');
});
app.put('/usuarios/:id', (req, res) => {
// Atualiza o usuário com o ID fornecido
const id = req.params.id;
res.send(`Usuário ${id} atualizado`);
});
app.delete('/usuarios/:id', (req, res) => {
// Remove um usuário específico
const id = req.params.id;
res.send(`Usuário ${id} removido`);
});
Organização em Arquivos de Rota
É comum separar as rotas em arquivos distintos para manter o projeto organizado. No diretório routes/index.js
, por exemplo:
const express = require('express');
const router = express.Router();
// Rota para usuários
router.get('/usuarios', (req, res) => {
res.send('Listar usuários');
});
// ... outras rotas
module.exports = router;
Em app.js
, importamos essas rotas:
const express = require('express');
const app = express();
const rotasIndex = require('./routes/index');
app.use(rotasIndex);
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Servidor rodando na porta ${PORT}`);
});
Middlewares: Interceptando e Processando Requisições🔗
Middlewares são funçõesFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. que interceptam o fluxo de requisições e respostas, permitindo que apliquemos lógicas como registro de logs, autenticação, tratamento de erros e muito mais.
Exemplo de Middleware de Log
// Middleware global que registra cada requisição no console
app.use((req, res, next) => {
console.log(`Método: ${req.method}, URL: ${req.url}`);
next(); // segue para a próxima função ou rota
});
Uso de Middlewares de Terceiros
Alguns middlewares já prontos podem ser instalados via npm
. Exemplos:Introdução ao Node.js: Servidor e FerramentasDescubra como dominar o Node.js e criar servidores HTTP. Aprenda a instalar, configurar e utilizar o NPM, além de aplicar práticas no desenvolvimento web.
- body-parser (já incluso nas versões atuais do Express via
express.json()
eexpress.urlencoded()
) - morgan para logs detalhados
- cors
Cross-Origin Resource Sharing (CORS) e Políticas de SegurançaExplore o mecanismo CORS e aprenda como ajustar cabeçalhos essenciais para proteger e permitir acesso seguro em sua aplicação web. para habilitar o CORS (Cross-Origin Resource Sharing
Cross-Origin Resource Sharing (CORS) e Políticas de SegurançaExplore o mecanismo CORS e aprenda como ajustar cabeçalhos essenciais para proteger e permitir acesso seguro em sua aplicação web.)
const morgan = require('morgan');
const cors = require('cors');
app.use(cors());
app.use(morgan('dev'));
app.use(express.json()); // substituto para body-parser
Servindo Arquivos Estáticos🔗
Para servir arquivos como CSSO que é CSS?Descubra como o CSS transforma a aparência das páginas web, separando conteúdo de design para melhor organização e flexibilidade., imagens e scripts, utilize o middleware
express.static
. Basta informar ao Express.js a pasta onde estarão esses arquivos:
app.use(express.static('public'));
Agora, qualquer arquivo disponível em ./public
pode ser acessado diretamente pela aplicação. Por exemplo, ./public/css
estará acessível em O que é CSS?Descubra como o CSS transforma a aparência das páginas web, separando conteúdo de design para melhor organização e flexibilidade./estilos.css
http://localhost:3000/css
.O que é CSS?Descubra como o CSS transforma a aparência das páginas web, separando conteúdo de design para melhor organização e flexibilidade./estilos.css
Sistemas de Template (View Engines)🔗
Quando é preciso entregar páginas HTMLO que é HTML? Fundamentos, História e Evolução da LinguagemDescubra a origem e evolução do HTML, entendendo sua importância na estrutura da web e como influenciou o desenvolvimento digital moderno. dinâmicas, podemos utilizar view engines, como EJS, Pug ou Handlebars. O objetivo é preencher dados de forma dinâmica nas páginas antes de enviá-las ao cliente.
Exemplo com EJS
Instale com:
npm install ejs
Em seguida, configure no app.js
:
app.set('view engine', 'ejs');
app.set('views', './src/views');
Crie um arquivo home.ejs
dentro de ./src
:Inserindo Imagens: `<img>`, Formatos, `alt` e `title`Aprenda a inserir imagens em HTML utilizando a tag <img> com foco em acessibilidade e performance, explorando atributos, formatos e melhores práticas./views
<!DOCTYPE html>
<html>
<head>
<title>Minha Aplicação Express</title>
</head>
<body>
<h1>Olá, <%= nome %>!</h1>
</body>
</html>
Na rota, renderize essa view:
app.get('/', (req, res) => {
res.render('home', { nome: 'Estudante' });
});
Quando você acessa http://localhost:3000/
, o Express.js processa o templateCriando e Gerenciando Templates DinâmicosAprenda a utilizar templates dinâmicos para criar interfaces web eficientes. Descubra técnicas com JavaScript puro integrando boas práticas e segurança. e envia o HTML com o valor de
nome
substituído.
Práticas de Desenvolvimento e Boas Sugestões🔗
- Separação de Responsabilidades: utilize pastas separadas para rotas, middlewares e configurações de banco de dados (se for
Estruturas de Controle: if, switch e loopsAprenda as estruturas de controle em JavaScript, como if/else, switch e loops, com exemplos claros e didáticos para otimizar seu código e lógica de programação. o caso).
- Variáveis
Pré-processadores (SASS/SCSS): Variáveis, Mixins, NestingAprenda a manter seu CSS de forma otimizada com SASS/SCSS utilizando variáveis, mixins e nesting para um código limpo e produtivo. de Ambiente: para configurações sensíveis (como portas, chaves de API
Consumindo APIs com Fetch e AxiosDescubra como integrar APIs com Fetch e Axios em JavaScript. Aprenda a fazer requisições HTTP, tratar erros e usar métodos GET e POST com exemplos práticos.), utilize arquivos
.env
e bibliotecas comodotenv
. - Tratamento de Erros: garanta que, se houver exceções
Tratamento de Erros e Exceções em Chamadas AssíncronasAprenda a tratar erros com Promises e Async/Await, garantindo robustez, legibilidade e confiabilidade nas operações assíncronas em JavaScript., seu middleware de erro (um middleware especial no Express) capture e retorne mensagens adequadas.
- Escalabilidade
SVG e Canvas: Diferenças e Usos BásicosDescubra as diferenças entre SVG e Canvas com este guia completo. Entenda nuances, técnicas de desenho e boas práticas para gráficos web.: em aplicações maiores, considere usar um gerenciador de processos como o
PM2
ouforever
para manter o servidor em execução.
Recomendações | Descrição |
---|---|
Logs Detalhados | Uso de pacotes como morgan para registrar requisições e status. |
Validações | Bibliotecas como express-validator podem garantir integridade. |
SSL/TLS | Em produção, servir conteúdos via HTTPS para maior segurança. |
Compressão Gzip | Utilizar compression para reduzir o tamanho das respostas HTTP. |
Executando e Testando a Aplicação🔗
Uma abordagem simples é usar o próprio NodeIntrodução ao Node.js: Servidor e FerramentasDescubra como dominar o Node.js e criar servidores HTTP. Aprenda a instalar, configurar e utilizar o NPM, além de aplicar práticas no desenvolvimento web. para executar, entretanto, há quem prefira instalar globalmente o nodemon, que recarrega o servidor sempre que um arquivo é alterado:
npm install --save-dev nodemon
Adicione um script em seu package.json
:
{
"scripts": {
"start": "node src/app.js",
"dev": "nodemon src/app.js"
}
}
Agora, basta rodar:
npm run dev
A cada alteração no código, a aplicação reiniciará automaticamente.
Conclusão🔗
O Express.js é conhecido por sua simplicidade, flexibilidade e velocidade no desenvolvimento de aplicações web e serviços.
Com poucas linhas de código, conseguimos configurar rotas, middlewares, serviços de arquivos estáticosPosicionamento: static, relative, absolute, fixed, stickyDescubra como usar os métodos de posicionamento CSS, de static a sticky, para criar layouts interativos, precisos e eficazes. e até mesmo lidar com templates
Criando e Gerenciando Templates DinâmicosAprenda a utilizar templates dinâmicos para criar interfaces web eficientes. Descubra técnicas com JavaScript puro integrando boas práticas e segurança. para geração de conteúdo dinâmico.
Depois de entender esses conceitos básicos, você estará pronto para construir aplicações robustas, escaláveis e prontas para produção. Recomendamos sempre aprofundar cada tópico com experimentos e práticas reais, criando pequenos projetos e explorando integrações com bancos de dados e outros serviços.
Fique à vontade para customizar, estender e integrar mais recursos à sua aplicação, lembrando sempre dos princípios de clareza e organização do código.
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Documentação oficial do MDN: developer.mozilla.org/pt-BR/docs/Web/JavaScript
- Documentação oficial do Node.js: nodejs.org/en/docs/