O que são Middleware no Node?

O que são Middleware no Node?

26 de julho de 2021 0 Por Ramos de Souza Janones

Middleware é todo o tipo de função que está entre um pedido HTTP e a resposta final que o servidor envia de volta para o cliente. Veja exemplos com Node e Express.

Os middlewares são funções que podem tratar os inputs e outputs das rotas antes e ou depois que uma rota é processada, ou seja, você pode criar um middleware que intercepta e verificar se uma requisição esta enviando um header específico e que caso o mesmo não esteja enviando o header ela retorne uma tela de erro para o usuário, negando a requisição de acessar uma determinada rota da aplicação, neste caso você criou e inejtou um middleware que trata uma pré-requisição.

request: ele é responsável por carregar dados da requisição que esta sendo realizada, geralmente vem com dados do cliente e algums parâmetros de input, como querystrings, parâmetros de rotas e body de um formulário. Em resumo, este objeto contém diversos dados do cliente.

response: este objeto permite que o servidor envie uma resposta para o cliente que realizou uma requisição. Aqui você pode enviar um html, json, dados via header, redirecionar a resposta para uma outra requisição, em geral este é um objeto focado em dar uma resposta para o cliente.

LEIA TAMBÉM:  Javascript - Requisições Ajax com Javascript sem uso de APIs

Pode-se criar um middleware que no final de cada resposta de uma rota, retorne também um header com metadados da resposta, por exemplo, headers de paginação de dados. Neste caso estamos criando um middleware de pós-requisição.

Evento gratuito de tecnologia: inscreva-se na 3ª edição do Dev Summit:

  1. Vem ai a 3ª edição do maior evento hands-on de desenvolvimento de software do Brasil. Vamos apresentar tecnologias, ferramentas e práticas em mais de 20 horas em sessões ao vivo com profissionais de referência em Full Stack, Flutter, Angular, React e muito mais.
  2.  



    Não há limites ao injetar middlewares, você pode criar e configurar N middlewares em sua aplicação, porém é sempre bom entender o que são cada middlewares e principalmente a ordem que cada middleware é injetado afeta no processamento de uma rota, ou seja, caso você injete middlewares em uma ordem errada, como efeito colateral sua aplicação pode responder ou até mesmo não processar corretamente suas rotas, por isso é extremamente importante entender o que cada middleware faz e em que ordem injetá-los.

    Exemplos de middleware com Express

    Usando Express.js, um pedido GET simples teria esta código:

    var app = express();
    app.get('/', function(req, res, next) {
      res.send('Hello World!');
    });

    É possível criar um log do tipo de request e do url de um request podes usar este middleware simples:

    app.use(function(req, res, next) {
      console.log(req.method, req.url);
      next();
    });

    A função middleware tem 3 parametros, pedido, resposta e callback. Podes ter n middleware a processar um pedido HTTP, encadeados. Quando um middleware acaba de processar coloca-se no final do código next();, invocando assim a callback e o código continua a correr para o proximo middleware ou resposta final.

    O middleware é portanto uma funcionalidade, funções que executam processos intermédios. Os exemplos mais comuns são interagir com a BD, ir buscar ficheiros estáticos, tratar de erros ou redirecionamentos.

    Um exepmplo de encadeamento de “middlewares” poderia ser assim:

    var express = require('express'), // chamar a app e dar configurações minimas
        app = express.createServer(),                                                                                                                                                 
        port = 1337;
     
    function middleHandler(req, res, next) {
        // tratar erros
        var err = req.body.foo == null;
        if (!err) next();
        else res.send("a variavel foo não tem dados!");
    }
     
    app.use(function (req, res, next) {
        // escrever na BD
        console.log(JSON.stringify(req.body));                                                                                                             
        next();
    });
    
    app.use(function (req, res, next) {
        // outros processos                                                                                                            
        next();
    });
     
    app.get('/', middleHandler, function (req, res) {
        console.log(ultimo passo);
        res.send("Obrigado pelo seu registo!");
    });
     
    app.listen(port);  // iniciar o servidor
    console.log('start server');

    No exemplo acima o app.get tem um middleware como argumento. Podes usar middleware encadeados também dessa maneira. Aqui fica um exemplo real:

    app.get('/', githubEvents, twitter, getLatestBlog, function(req, res){
        res.render('index', {
            title: 'Ramos da Informática',
            site: 'ramosdainformatica.com.br',
            lastBlogPost: res.locals.lastBlogPost,
            tweetFeed: res.locals.twitter
        });
    });

    Sugestão de leitura

    VOCÊ ESTÁ NAS SEÇÕES: » MundoJS » Node 

    votes
    Article Rating

    E-Zine Ramos da Informática

    * indicates required

    View previous campaigns.