Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

duvidas com o module.export

minha classe factory de conexão como bd:

var mysql = require('mysql');

function configConnection() {

    return mysql.createConnection({
        host: "localhost",
        user: "root",
        password: "123",
        database: "casadocodigo_nodejs",
    });
}

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

quando eu chamo ela em algum trecho da aplicação eu faço:

var connection = app.infra.connectionFactory();

meu "projeto de dao" :

module.exports = function() {
    this.lista = function (connection, callback){
        connection.query('select * from produtos', callback);
    }
    return this;
}

quando chamo ele na aplicação:

var produtosBanco = app.infra.produtosBanco;

por que na minha connection factory eu chamo o a "classe" como um função() mas na produtoBanco eu n posso chamar ele como função ?

1 resposta
solução!

Julio,

O express-load já carrega os módulos na aplicação pra você não precisar fazer o require. Mas o express-load automaticamente chama a função retornada pelo seu module.exports.

No seu último código:

module.exports = function() {
    this.lista = function (connection, callback){
        connection.query('select * from produtos', callback);
    }
    return this;
}

Você está exportando uma função. Quando esta função for executada, ela executará as operações que estiverem nela e retornará this. Neste caso, você não precisa chamar a função utilizando var produtosBanco = app.infra.produtosBanco(); simplesmente porque o express-load já chamou a função pra você, e você já tem o valor retornado em app.infra.produtosBanco.

Já no seu primeiro código, você se precaveste deste comportamento e fez uma gambiarra:

var mysql = require('mysql');

function configConnection() {

    return mysql.createConnection({
        host: "localhost",
        user: "root",
        password: "123",
        database: "casadocodigo_nodejs",
    });
}

// Seu módulo está exportando uma função.
// Ao ser chamada ela retorna outra função.
// O express-load fez o processo comentado acima.
module.exports = function () {
    return configConnection;
}

Agora você recebeu em app.infra.connectionFactory uma função. No caso, a configConnection, agora basta chamá-la para receber como retorno a sua connection:

var connection = app.infra.connectionFactory()

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