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 FerramentasIntroduçã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 FerramentasIntroduçã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 AmbienteIntroduçã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 FerramentasIntroduçã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

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 ObjetosFundamentos 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 ObjetosFundamentos 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+Classes 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 JavaScriptFunçõ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 npmIntrodução ao Node.js: Servidor e FerramentasIntroduçã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.. Exemplos:

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?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., 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/cssO que é 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 estará acessível em http://localhost:3000/cssO que é 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 LinguagemO 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 ./srcInserindo Imagens: `<img>`, Formatos, `alt` e `title`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âmicosCriando 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🔗

RecomendaçõesDescrição
Logs DetalhadosUso de pacotes como morgan para registrar requisições e status.
ValidaçõesBibliotecas como express-validator podem garantir integridade.
SSL/TLSEm produção, servir conteúdos via HTTPS para maior segurança.
Compressão GzipUtilizar 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 FerramentasIntroduçã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, stickyPosicionamento: 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 templatesCriando e Gerenciando Templates DinâmicosCriando 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🔗

Compartilhar artigo

Artigos Relacionados