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!