Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Mudanças na versão recent do express validator

Ao instalar a última versão do express validator não foi possível adicioná-lo como middleware através do app.use().

Dando uma olhada no Stack Overflow e na documentação do express validator e ainda, depois de fazer alguns testes, cheguei à seguinte linha de no custom-express.js.

const expressValidator = {check, validationResult} = require('express-validator');

Apenas com esta adição, sem nem usar um app.use adicional o validator funcionou, porém não consigo entender como. Gostaria de ajuda para elucidar este funcionamento. Uma outra coisa curiosa, é que quando eu não recebo essa expressão em uma variável, ele para de funcionar acusando "check is not defined".

ou seja,

const  {check, validationResult} = require('express-validator');

não funciona.

1 resposta
solução!

Olá João, tudo bem?

Em relação aos seus pontos

const expressValidator = {check, validationResult} = require('express-validator');

A grande questão é que se você utilizou dessa maneira, então teoricamente era para funcionar assim:

const  {check, validationResult} = require('express-validator');

Pois o que está acontecendo na primeira forma é buscando o método check e validationResult do express-validator, criando um objeto com essas duas propriedades e atribuindo a nossa variável expressValidator

Enquanto da segunda forma, só estamos fazendo um destructuring e gerando 2 variáveis com o mesmo nome dos métodos buscados, como você mesmo notou que esta undefined, provavelmente pode ser algum problema com a biblioteca, na dúvida delete o package-lock.json e faça a instalação novamente do exprress-validator para ter a última versão

Eu peguei o projeto, deletei a node_modules e instalei a versão 6.6 do express-validator e funcionou corretamente os imports da segunda maneira

Agora porque não precisamos utilizar o app.use, vai do funcionamento da biblioteca neste momento, comparado ao que o instrutor mostrou, provavelmente nas versões antigas o express-validator fazia uma injeção de propriedades em nossa requisição, e dessa forma conseguíamos fazer a validação com o próprio assert injetado

Nessa nova versão o que temos é um array de middlewares de validações, onde sempre que temos algum erro é adicionado na hora dentro da requisição e conseguímos obter através dos validationsResults, por isso que a validação fica da seguinte maneira:

const { body, validationResult, check } = require('express-validator');

 app.post('/pagamentos/pagamento', [
    check("forma_de_pagamento").notEmpty().withMessage("Forma de Pagamento é Obrigatória"),
    check("valor").isFloat().notEmpty().withMessage("O valor é obrigatório e deve ser um decimal")
  ],function(req, res){

    var erros = validationResult(req).formatWith( ({ msg }) => msg);

    if (!erros.isEmpty()){
      return res.status(400).send({erros: erros.array()});
    }

    var pagamento = req.body
[...]

Foi apenas uma mudança de design da API, que observando agora, faz muito mais sentido, pois fazemos o append de validações apenas nas rotas que precisamos :)

Abraços e Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software