Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Criando Middleware Personalizado | Desenvolvimento de Aplicações Web com Express.js
Desenvolvimento Backend com Node.js e Express.js

bookCriando Middleware Personalizado

No Express.js, é possível criar funções de middleware personalizadas utilizando o método app.use(). Essas funções recebem três parâmetros: req (o objeto de requisição), res (o objeto de resposta) e next (uma função para passar o controle para o próximo middleware na cadeia). O middleware personalizado pode ser aplicado globalmente a todas as rotas ou a rotas específicas, especificando um caminho de rota.

Criando Middleware Personalizado

Exemplo básico de uma função de middleware personalizada que registra o timestamp e a URL de cada requisição recebida:

app.use((req, res, next) => {
  const timestamp = new Date().toISOString();
  const url = req.url;
  
  console.log(`[${timestamp}] ${url}`);
  
  next(); // Pass control to the next middleware.
});

Neste exemplo, o middleware personalizado registra o timestamp e a URL de cada requisição recebida no console. A função next() é chamada para passar o controle ao próximo middleware no pipeline.

Exemplo do Mundo Real: Combinando Middleware Nativo e Personalizado

A seguir, um exemplo prático onde utilizamos um middleware nativo do Express para analisar dados JSON e, em seguida, criamos um middleware personalizado para validar esses dados antes de prosseguir:

const express = require('express');
const app = express();

// Use built-in middleware to parse JSON data.
app.use(express.json());

// Custom middleware to validate JSON data.
app.use((req, res, next) => {
  const jsonData = req.body;

  if (!jsonData || Object.keys(jsonData).length === 0) {
    // If the JSON data is missing or empty, send an error response.
    return res.status(400).json({ error: 'Invalid JSON data' });
  }

  // Data is valid; proceed to the next middleware or route.
  next();
});

// Route that expects valid JSON data.
app.post('/api/data', (req, res) => {
  const jsonData = req.body;
  res.status(200).json({ message: 'Data received', data: jsonData });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000.');
});

Neste exemplo:

  • Utiliza-se o middleware nativo express.json() para analisar os dados JSON recebidos;
  • Cria-se um middleware personalizado que verifica se os dados JSON analisados estão ausentes ou vazios. Se estiverem, envia uma resposta 400 Bad Request com uma mensagem de erro. Se os dados forem válidos, chama next() para prosseguir para a rota;
  • A rota /api/data espera dados JSON válidos. Se o middleware personalizado validar os dados, o manipulador da rota os recebe e envia uma resposta de sucesso.

Este exemplo demonstra como é possível utilizar tanto middleware nativo quanto personalizado para validar dados antes que eles cheguem aos manipuladores de rotas, garantindo que os dados estejam no formato esperado antes de serem processados.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 9

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

Can you explain how to apply middleware to specific routes only?

What are some other use cases for custom middleware in Express.js?

How does the order of middleware affect request handling in Express.js?

Awesome!

Completion rate improved to 2.56

bookCriando Middleware Personalizado

Deslize para mostrar o menu

No Express.js, é possível criar funções de middleware personalizadas utilizando o método app.use(). Essas funções recebem três parâmetros: req (o objeto de requisição), res (o objeto de resposta) e next (uma função para passar o controle para o próximo middleware na cadeia). O middleware personalizado pode ser aplicado globalmente a todas as rotas ou a rotas específicas, especificando um caminho de rota.

Criando Middleware Personalizado

Exemplo básico de uma função de middleware personalizada que registra o timestamp e a URL de cada requisição recebida:

app.use((req, res, next) => {
  const timestamp = new Date().toISOString();
  const url = req.url;
  
  console.log(`[${timestamp}] ${url}`);
  
  next(); // Pass control to the next middleware.
});

Neste exemplo, o middleware personalizado registra o timestamp e a URL de cada requisição recebida no console. A função next() é chamada para passar o controle ao próximo middleware no pipeline.

Exemplo do Mundo Real: Combinando Middleware Nativo e Personalizado

A seguir, um exemplo prático onde utilizamos um middleware nativo do Express para analisar dados JSON e, em seguida, criamos um middleware personalizado para validar esses dados antes de prosseguir:

const express = require('express');
const app = express();

// Use built-in middleware to parse JSON data.
app.use(express.json());

// Custom middleware to validate JSON data.
app.use((req, res, next) => {
  const jsonData = req.body;

  if (!jsonData || Object.keys(jsonData).length === 0) {
    // If the JSON data is missing or empty, send an error response.
    return res.status(400).json({ error: 'Invalid JSON data' });
  }

  // Data is valid; proceed to the next middleware or route.
  next();
});

// Route that expects valid JSON data.
app.post('/api/data', (req, res) => {
  const jsonData = req.body;
  res.status(200).json({ message: 'Data received', data: jsonData });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000.');
});

Neste exemplo:

  • Utiliza-se o middleware nativo express.json() para analisar os dados JSON recebidos;
  • Cria-se um middleware personalizado que verifica se os dados JSON analisados estão ausentes ou vazios. Se estiverem, envia uma resposta 400 Bad Request com uma mensagem de erro. Se os dados forem válidos, chama next() para prosseguir para a rota;
  • A rota /api/data espera dados JSON válidos. Se o middleware personalizado validar os dados, o manipulador da rota os recebe e envia uma resposta de sucesso.

Este exemplo demonstra como é possível utilizar tanto middleware nativo quanto personalizado para validar dados antes que eles cheguem aos manipuladores de rotas, garantindo que os dados estejam no formato esperado antes de serem processados.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 9
some-alt