Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Não consigo executar server após implementar autoload

Professor, eu sei que o problema deve ser um pequeno detalhe, mas estou perdendo muito tempo nele. Eu criei o projeto com a mesma estrutura de diretórios e baixei o autoload, porém não está querendo executar pois ele diz que app.infra.connectionFactory está undefined.

Segue código:

app.js

var app = require('./config/express')();

const HOST = 'http://localhost:';
const PORT = '3000';

app.listen(PORT, function() {
    console.log('Server listening on ' + HOST + PORT + ' ...');
});

config/express.js

// Require ExpressJS
var express = require('express');

// Express Autoload
var load = require('express-load');

module.exports = function() {

    // App
    var app = express();

    // Set view engine
    app.set('view engine', 'ejs');

    // Set views path
    app.set('views', './app/views');

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

    return app;
};

app/infra/connectionFactory.js

var mysql = require('mysql');

function createConnection() {

    return mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: 'keymaster312',
        database: 'dbAlura'
    });

}

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

app/routes/produto.routes.js

module.exports = function(app) {

    // Objeto de conexão com a base de dados
    var conn = app.infra.connectionFactory();

    // Rota para listagem de produtos
    app.get('/produtos/lista', function(req, res) {

        // Executando consulta
        conn.query('select * from produtos', function(err, results) {
            res.render('produtos/lista', {
                lista : results
            });
        }).end();
    });
}

ERRO:

C:\Users\brunocarneiro\Documents\desenvolvimento\estudo\back-end\nodejs\alura\app\routes\produto.routes.js:8
    var conn = app.infra.connectionFactory();
                         ^

TypeError: Cannot read property 'connectionFactory' of undefined
    at Object.module.exports (C:\Users\brunocarneiro\Documents\desenvolvimento\estudo\back-end\nodejs\alura\app\routes\produto.routes.js:8:26)
    at C:\Users\brunocarneiro\Documents\desenvolvimento\estudo\back-end\nodejs\alura\node_modules\express-load\lib\express-load.js:241:19
    at iterate (C:\Users\brunocarneiro\Documents\desenvolvimento\estudo\back-end\nodejs\alura\node_modules\async\lib\async.js:131:13)
    at Object.async.eachSeries (C:\Users\brunocarneiro\Documents\desenvolvimento\estudo\back-end\nodejs\alura\node_modules\async\lib\async.js:147:9)
    at ExpressLoad.into (C:\Users\brunocarneiro\Documents\desenvolvimento\estudo\back-end\nodejs\alura\node_modules\express-load\lib\express-load.js:224:9)
    at module.exports (C:\Users\brunocarneiro\Documents\desenvolvimento\estudo\back-end\nodejs\alura\config\express.js:21:10)
    at Object.<anonymous> (C:\Users\brunocarneiro\Documents\desenvolvimento\estudo\back-end\nodejs\alura\app.js:1:100)
    at Module._compile (module.js:635:30)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)

Será que eu estou perdendo algum detalhe? Pode me ajudar?

Obrigado!

5 respostas
solução!

Ei, Bruno, tudo bem?

Acredito que voce tenha que incluir o connection factory antes das rotas, por que ao que parece, elas chamam o método antes de ele ter sido criado

Allan, eu vou falar uma coisa aqui pra você e eu, como programador, sei que você vai acreditar em mim... Eu tinha tentado fazer o que você disse DEZENAS de vezes, mas sem sucesso, porém, segundo a sua palavra, tentei fazer novamente, substituindo:

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

por

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

E agora funcionou! KKKKK! Você deve ser chefe de alguma equipe de desenvolvimento, pois o meu chefe tinha os mesmo poderes que você.. Ele olhava o código e os erros corriam de medo... kkkk

Obrigado mano! Sucesso!

KKKKKKKK

Eu acredito!! hhahaha

Estranhamente, sou o chefe de desenvolvimento do time de ecommerce da empresa

Que bom que resolveu! Fico feliz!!

Hahahahahahaha!!!! Sabia que aí tinha coisa! Muito obrigado amigo! Estou gostando muito do curso! Obrigado pela ajuda!

Alan eu tive mesmo problema que bruno, sua solução salvou mais um !