8
respostas

Ajuda NodeJs aula 05 Respeitando o accept ATIVIDADE 01 - (RESOLVIDO)

Quando tento gravar os dados do meu form no banco de dados esta aparecendo o seguinte erro. Já revisei varias vezes mas esta igual o da atvidade. Poderiam me ajudar nessa questão.

TypeError: req.validationErr is not a function at C:\Users\CAMeyer\codigo\app\routes\produtos.js:34:19 at Layer.handle [as handle_request] (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\layer.js:95:5) at next (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\route.js:137:13) at Route.dispatch (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\layer.js:95:5) at C:\Users\CAMeyer\codigo\node_modules\express\lib\router\index.js:281:22 at Function.process_params (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\index.js:335:12) at next (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\index.js:275:10) at C:\Users\CAMeyer\codigo\node_modules\express-validator\lib\express_validator.js:408:5 at Layer.handle [as handle_request] (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\layer.js:95:5)

CODIGO EXPRESS.JS

var express = require('express');
var load = require('express-load');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');

module.exports = function(){
    var app = express();
    app.set('view engine', 'ejs');
    app.set('views', './app/views');

    app.use(bodyParser.urlencoded({extended: true})); 
    app.use(bodyParser.json());
    app.use(expressValidator());

    load('routes', {cwd: 'app'})
        .then('infra')
        .into(app);
        return app;
};

CODIGO PRODUTOS.JS
module.exports = function(app){
    //var listaProdutos = function(req, res){
    app.get('/produtos', function(req, res){
        var connection = app.infra.connectionFactory();
        var ProdutosDAO = new app.infra.ProdutosDAO(connection);
        ProdutosDAO.lista(function(err, results){
            res.format({
                html: function(){
                    res.render('produtos/lista',{lista:results});
                },
                json: function(){
                    res.json(results);
                }
            });

        });
        connection.end();
    });

    //app.get('/produtos', listaProdutos);


    app.get('/produtos/form', function(req, res){
        res.render('produtos/form');
    });
    // codigo abaixo é usado para salvar os dados
    app.post('/produtos', function(req,res){

        var produto = req.body;

        var validadorTitulo = req.assert('titulo', 'Titulo é obrigatório');
        validadorTitulo.notEmpty();

        var erros = req.validationErros();
        if(erros){
            res.render('produtos/form');
            return;
        }

        var connection = app.infra.connectionFactory();
        var ProdutosDAO = new app.infra.ProdutosDAO(connection);
        ProdutosDAO.salva(produto, function(err, results){
            res.redirect('/produtos');
        });
    });
}
8 respostas

Olá, Andre.

Me parece que você está com algum cache. Procurei no seu código o erro que a mensagem do erro está falando:

TypeError: req.validationErr is not a function at

Não encontrei em nenhum lugar uma chamada de req.validationErr. Se você tiver usando o nodemon para subir o server, é provável que você tenha dado um ctrl+s que acabou salvando o arquivo enquanto você escrevia o método validationError por isso acabou recebendo essa mensagem de erro.

Tenta fechar o terminar e reiniciar e subir o servidor novamente. Se não funcionar, avisa que tentamos outras coisas. :-)

OI André, tudo bem? Acho que foi apenas um erro de digitação, você escreveu req.validationErros() quando deveria ser req.validationErrors().

Testa pra gente?

Vixi. Verdade, nem tinha a falta do na letra r. Boa Wanderson ;-)

Boa noite, Verdade eu encontrei esse erro de digitação que eu fiz, obrigado.

Mas agora quando eu clico em salvar ele apresenta outro erro.

Servidor Rodando
TypeError: req.validationErros is not a function
    at C:\Users\CAMeyer\codigo\app\routes\produtos.js:33:22
    at Layer.handle [as handle_request] (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\CAMeyer\codigo\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\index.js:275:10)
    at C:\Users\CAMeyer\codigo\node_modules\express-validator\lib\express_validator.js:408:5
    at Layer.handle [as handle_request] (C:\Users\CAMeyer\codigo\node_modules\express\lib\router\layer.js:95:5)

O código esta certo copiei e colei da atividade e não esta dando erro mais.

Mas agora quando salvar ele vai para tela de produtos em vez de ficar na tela de form.

var validatorTitulo = req.assert('titulo','Titulo é obrigatório');
        validatorTitulo.notEmpty();
        var erros = req.validationErrors();        

        if(erros){
            res.render('produtos/form');
            return;
        }

Esqueci de informar a mensagem que aparece no terminal CMD.

[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
Servidor Rodando
(node:6180) DeprecationWarning: req.validationErrors() may be removed in a future version. Use req.getValidationResult() instead.

RESOLVIDO - Boa noite, Eu que estava comento erros aqui, estudar com sono da nisso.

Obrigado pela ajuda.

Eram dois erros de digitação Andre, e o último não é um erro, só um aviso que a função que captura a validação será alterada nas próximas versões do pacote.

Aproveita e lembra de marcar o post que resolveu sua dúvida como solução do tópico por favor?

Abraço 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