4
respostas

Problema ao requisitar página inicial do projeto no heroku.

Eu não consegui abrir a página inicial do projeto no Heroku. Percebi que as rotas de livros (produtos) funcionam normal, mas a página inicial não funcionou. Podem me dar uma ajuda?

Vou mandar meu arquivo express.js aqui pra ficar mais fácil. Ah, a conexão com o banco funcionou normal.

express.js:

const configs = require('./configs');
const express = require('express');
const load = require('express-load');
const bodyParser = require('body-parser');
const expressValidator = require('express-validator');

let app = express();

app.use(express.static(__dirname + '/app/public'));
app.set(configs.VIEW_ENGINE_PARAM, configs.VIEW_ENGINE_VALUE);
app.set(configs.VIEWS_PARAM, configs.VIEWS_VALUE);

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

load('./db', {cwd: './app/'})
    .then('./routes')
    .into(app);

app.use(function (req, res, next) {
    res.status(404).render('erros/404');
    next();
});

app.use(function(error, req, res, next){
    if(process.env.NODE_ENV == 'production') {
        res.status(500).render('error/500');
        return;
    }
    next(error);
});

module.exports = function() {
    return app;
};

Ah gente, só pra constar, o curso que eu vinha fazendo era o https://cursos.alura.com.br/course/node-js com o professor Alberto Souza.

4 respostas

Oi Ana, tudo bem? Me parece que você não tem nenhuma rota para o / que é sua página inicial. Só isso mesmo. Você pode mostrar o que tem no routers pra gente vê?

Claro Wanderson, valeu pela resposta. Vou mandar aqui, todos os arquivos de rota que eu tenho, fiz eles seguindo o curso já linkado.

home.js

module.exports = function(app)  {
    let produtosDAO = new app.db.business.ProdutosDAO(app);

    app.get('/', function(req, res) {
        produtosDAO.lista(function(resultados) {
            res.render('home/index', {livros: resultados.rows});
        }, function(erro) {
            console.log('Erro ao renderizar página inicial.');
        });
    });
}

produtos.js

function rotas(app) {
    let produtosDAO = new app.db.business.ProdutosDAO(app);

    app.get('/produtos', function(req, res, next) {
        res.format({
            html: function() {
                produtosDAO.lista(function(data) {
                    res.render('produtos/lista', {produtos: data.rows});
                }, function(err) {
                    console.log('Erro ao tentar se conectar com o banco.');
                    return next(err);
                });
            },
            json: function() {
                produtosDAO.lista(function(data) {
                    res.json(data.rows);
                }, function(err) {
                    console.log('Erro ao tentar se conectar com o banco.');
                    res.json({"erro": err});
                    return next(err);
                });
            }
        });
    });

    app.get('/produtos/form', (req, res) => res.render('produtos/form', {errosValidacao: [], produto: {}}));

    app.post('/produtos', (req, res, next) => {
        let produto = req.body;

        // validações
        req.assert('titulo', 'Título é obrigatório').notEmpty();
        req.assert('preco', 'O preço deve ser um número válido.').isFloat();

        let erros = req.validationErrors();
        if (erros) {
            res.format({
                html: function() {
                    res.status(400).render('produtos/form', {errosValidacao: erros, produto: produto});
                },
                json: function() {
                    res.status(400).render(erros);
                }
            });
            return;
        }

        produtosDAO.salvar(
            produto,
            function(resultado) {
                console.log(`O livro ${produto.titulo} foi cadastrado.`);
                res.redirect('/produtos')
            },
            function(erro) {
                console.log(`Erro ao cadastrar o ${produto}: ${erro}`);
                return next(erro);
            }
        );
    });
}

module.exports = rotas;

promocoes.js

module.exports = function(app) {
    const produtosDAO = new app.db.business.ProdutosDAO(app);

    app.get("/promocoes/form",function(req, res) {
        produtosDAO.lista(function(resultados) {
            res.render('promocoes/form', {lista: resultados.rows});
        }, function(erro) {
            console.log(`Erro ao ler os livros do banco -> ${erro}`);
        });
    });

    app.post("/promocoes", function(req, res) {
        var promocao = req.body;
        app.get('io').emit('novaPromocao', promocao);
        res.redirect('promocoes/form');
    });
}

Muito estranho isso Ana, seu home.js configura direitinho a rota para a página inicial. O que acontece quando você tenta acessar a página inicial? Dá algum erro? Você já tentou dar uma olhada nos logs da sua aplicação no heroku? Quando há algum problema, o log sempre pode dar uma boa dica do que pode estar acontecendo.

Tem um addon para o Heroku que ajuda a ver de forma mais fácil os logs, é o PaperTrail. Tem um plano sem custo.

https://elements.heroku.com/addons/papertrail

Agora, também é possível puxar os logs conectando no heroku pelo console

https://devcenter.heroku.com/articles/logging