3
respostas

Cannot GET /produtos/form

Estou na altura da aula 5 e meu form parou de funcionar. A listagem funciona normal, porém o form não. Mysql tá ligado normalmente e não estou recebendo nenhum erro no terminal.

produtos.js

module.exports = function(app) {
    // var listaProdutos = function(req, res) {

    //     var connection = app.infra.connectionFactory();
    //     var produtosDao = new app.infra.ProdutosDAO(connection);

    //     produtosDao.lista(function(err, results){
    //         res.render('produtos/lista', {lista: results});
    //     });

    //     connection.end();

    // }
    // app.get("/produtos",listaProdutos);

    // app.get('/produtos/form', function(req, res){
    //     res.render('produtos/form');
    // });

    app.get('/produtos',function(req,res){
        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);

        produtosDAO.lista(function(erros,resultados){
            res.format({
                html: function(){
                    res.render('produtos/lista', {lista:resultados});
                },
                json: function(){
                    res.json(resultados)
                }
            });

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

app.post("/produtos",function(req,res) {
        var produto = req.body;
        console.log(produto);

        var connection = app.infra.connectionFactory();
        var produtosDao = new app.infra.ProdutosDAO(connection);

        var validadorTitulo = req.assert('titulo', 'Titulo deve ser preenchido').notEmpty();
        req.assert('preco','Preco deve ser um número').isFloat();

        var errors = req.validationErrors();
        if(errors){
            res.render('produtos/form',
                {validationErrors:errors}
                );
            return;
        }

        produtosDao.salva(produto,function(erros,resultado){
                res.redirect("/produtos");
        });

        connection.end();

    });
}

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;
}
3 respostas

Eu também tive o mesmo erro, quando preencho os dados faltando, ele deveria retornar pra tela do form. Porém apresenta o erro abaixo:

Error: Failed to lookup view "product/form" in views directory "./app/views"

1: Pode inserir um console.log após

res.render('produtos/form',
                {validationErrors:errors}
                );

?

Pode ser que esteja havendo algum erro no formulário que ao renderizar novamente não está exibindo os erros. Mostra também o HTML do formulário como tá.

2: O erro pode estar em produtosDao.salva. Tenta tratar esse erro com um console.log e vê se aparece algo.

Patrick, você colocou um arquivo form.ejs no diretório app/views/product ?