This Banner is For Sale !!
Get your ad here for a week in 20$ only and get upto 15k traffic Daily!!!

Express – Middlewares – DEV Community




Middlewares



O que são?

São quaisquer funções passadas de forma direta ou indireta para uma rota, recebendo até três parâmetros, sendo os dois primeiros o objeto de requisição e de resposta, respectivamente e o terceiro é uma callback que aciona o próximo Middleware.

** Middlewares que recebem quatro parâmetros são Middlewares de Erro e iremos aborda-los mais a frente.



O que faz?

Por serem funções, os Middlewares podem realizar diversas ações diferentes, tudo depende daquilo que queremos/precisamos fazer. Porém todo o Middleware sempre pode realizar essas três ações: manipular a requisição; enviar uma resposta; e/ou chamar o próximo middleware.



Sintaxe

Como vimos em sua definição, Middlewares são funções, que podem ser passadas direta ou indiretamente para a rota, a única diferença dos Middlewares para funções puras são os parâmetros recebidos.

Middlewares recebem por padrão três parâmetros, a requisição req, a resposta res e a referência ao próximo Middleware subsequent.

operate myMiddleware(req, res, subsequent) {}
api.get(/*rota*/, myMiddleware);

const myMiddleware = (req, res, subsequent) => {};
api.get(/*rota*/, myMiddleware);

app.get(/*rota*/, (req, res, subsequent) => {});
Enter fullscreen mode

Exit fullscreen mode

Lembrando que não precisamos passar sempre uma arrow operate como Middleware, podemos definir uma função previamente e passá-la como callback, sempre respeitando os parâmetros de um Middleware.




Middlewares Globais



O que são?

São funções que serão executadas antes, ou depois, de qualquer outro Middleware, sua ordem de execução depende diretamente do seu posicionamento no código.



O que fazem?

Middlewares globais normalmente são usados para autenticação, tratamento prévio dos dados e/ou tratamento de erros.



Sintaxe

Assim como qualquer Middleware, um world também é constituído de uma função de até três parâmetros, porém a diferença é que iremos chamar ele no app.use(), assim toda e qualquer rota definida abaixo do método .use() será executada somente após o Middleware world.

app.use((req, res, subsequent) => {});
Enter fullscreen mode

Exit fullscreen mode




Valores entre Middlewares



Como fazer?

Para conseguirmos passar valores entre Middlewares, utilizamos o objeto de requisição req como um intermediário, dessa forma a chave que alterarmos/adicionarmos nesse objeto será refletida no próximo Middleware.

const firstMiddleware = (req, res, subsequent) => {
  req.consumer = { title: 'usuario', password: 'abc123' };
  subsequent();
};
Enter fullscreen mode

Exit fullscreen mode

Não passamos os valores através de parâmetros para a callback subsequent(), pois caso passássemos, o próximo Middleware a ser chamado seria um Middleware de Erro e não um Middleware “comum”.

Lembrando que a chave não precisa existir previamente no objeto.




Router



O que é?

É um método do Specific que permite agrupar diversos endpoints em um único arquivo.



O que faz?

Permite a fragmentação das rotas em diversos arquivos, algo comparable ao que ocorre no React com os componentes.



Sintaxe



Criação

Como o Router é um método que permite a fragmentação do código em diferentes arquivos, o primeiro passo é criar um novo arquivo para guardar os endpoints de determinada rota.

Com o arquivo criado, precisamos importar o Specific e a partir dele gerar nosso router, para isso executamos o método .Router() do Specific e armazenamos seu retorno em uma constante, convencionalmente chamada de router.

Tendo o router criado, a sintaxe de criação de endpoint segue a mesma, com a diferença que não usamos mais o objeto app, mas sim o router que criamos. Ao last da criação dos endpoints é necessário exportar somente o router.

// routes/myRouter.js

const categorical = require('categorical');
const router = categorical.Router();

myRoute.get('/', (req, res) => {});
myRoute.put up('/', (req, res) => {});

module.exports = myRoute;
Enter fullscreen mode

Exit fullscreen mode



Uso

Para usarmos os endpoints criados em um arquivo externo é muito simples, em nosso arquivo principal (normalmente index.js) importamos o router criado no outro arquivo, para isso chamamos a função require() passando o path como parâmetro e armazenando seu retorno em uma constante, essa que pode receber qualquer nome.

Com o router contendo os endpoints importados, tudo que precisamos fazer é utilizar o método .use() passando dois parâmetros, o primeiro será a rota daqueles endpoints e o segundo o router que acabamos de importar.

// src/index.js

const myRouter = require('./myRouter');

app.use('/someRoute', myRouter);
Enter fullscreen mode

Exit fullscreen mode




Tratando Erros



Por que fazer?

Precisamos tratar o erro dentro da API, porque caso não o fizermos e a nossa aplicação quebrar, o erro irá aparecer de forma “crua” para o usuário, deixando nossa aplicação vulnerável.



Como fazer?

O tratamento de erros dentro do Specific se dá através de Middlewares de Erros, esses que são similares aos outros que vimos até então, com uma única diferença, esse recebe quatro parâmetros obrigatórios.

Além dos três parâmetros base, req, res e subsequent, também recebe o erro como primeiro argumento. Sendo assim, mesmo que não usemos os outros argumentos, é necessário passá-los, isso porque o Specific identifica um Middleware de Erro a partir do número de parâmetros.



Sintaxe

Como visto anteriormente, o Middleware de erro precisa receber quatro parâmetros sendo eles o de erro err, o de requisição req, o de resposta res e o de chamada ao próximo subsequent.

Além disso, esses Middlewares precisam ser definidos por último, a partir do método .use(). E para executá-los usamos a callback subsequent(), passando um parâmetro para ela, dessa forma o Specific sabe que o próximo Middleware a ser executado é para o tratamento de erros.

app.get(/*rota*/, (req, res, subsequent) => {
  strive {
    /*bloco de lógica*/
  } catch (err) {
    subsequent(err)
  }
});

app.use((err, req, res, subsequent) => {});
Enter fullscreen mode

Exit fullscreen mode




Specific-rescue



O que é?

É um pacote externo do Node, disponível by way of NPM. Para instalar esse pacote basta utilizar o comando:

npm i express-rescue
Enter fullscreen mode

Exit fullscreen mode



O que faz?

Esse pacote facilita a escrita de Middlewares com tratamento de erro “embutido”, dessa forma o código fica mais enxuto e legível.



Sintaxe

Após termos instalado o pacote, tudo que precisamos fazer é importá-lo e chamá-lo como Middleware do endpoint, passando uma callback como parâmetro, essa que irá receber os três parâmetros comuns aos Middlewares (req, res e subsequent).

const rescue = require('express-rescue');

app.get('/', rescue((req, res, subsequent) => {}));
Enter fullscreen mode

Exit fullscreen mode

The Article was Inspired from tech community site.
Contact us if this is inspired from your article and we will give you credit for it for serving the community.

This Banner is For Sale !!
Get your ad here for a week in 20$ only and get upto 10k Tech related traffic daily !!!

Leave a Reply

Your email address will not be published. Required fields are marked *

Want to Contribute to us or want to have 15k+ Audience read your Article ? Or Just want to make a strong Backlink?