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

Node JS com ES6

Boa tarde pessoal,

estou reescrevendo os exemplos do cursos para o ES6 e tudo estava ocorrendo as mil maravilhas, mas quando eu cheguei na parte do prototype aí encontrei alguns probleminhas: Exemplo mostrado no curso:

function ProdutosBanco(connection){
    this._connection = connection;
}

ProdutosBanco.prototype.lista = function(callback){
    this._connection.query('select * from produtos',callback);
}

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

    app.get('/produtos',function(req,res){

        var connection = app.infra.connectionFactory();
        var produtosBanco = new app.infra.produtoBanco(connection);

        produtosBanco.lista(function(erros,resultados){
            res.render('produtos/lista',{lista:resultados});
        });

        connection.end();
    });

Minha versão com ES6

class ProdutoBanco {
    constructor(connection) {
        this._connection = connection;
    }

    lista(callback) {
        this._connection.query('select * from livros', callback);
    }
}

module.exports = (connection) => new ProdutoBanco(connection);
module.exports = (app) => 
    app.get('/produtos', (request, response) => {

        let connection = app.infra.connectionFactory();
        console.log(app.infra.produtosBanco);
        let produtosBanco = app.infra.produtosBanco(connection);

        produtosBanco.lista((err, result) => response.render('produtos/lista', {lista: result}));

        connection.end();
    });

Quando eu tento executar url /produtos eu tenho esse problema:

TypeError: app.infra.produtosBanco is not a function
    at app.get (/home/joao/Projetos/home-workspace/casadocodigo-node/app/routes/produtos.js:6:39)
    at Layer.handle [as handle_request] (/home/joao/Projetos/home-workspace/casadocodigo-node/node_modules/express/lib/router/layer.js:95:5)
    at next (/home/joao/Projetos/home-workspace/casadocodigo-node/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/home/joao/Projetos/home-workspace/casadocodigo-node/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/home/joao/Projetos/home-workspace/casadocodigo-node/node_modules/express/lib/router/layer.js:95:5)
    at /home/joao/Projetos/home-workspace/casadocodigo-node/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/home/joao/Projetos/home-workspace/casadocodigo-node/node_modules/express/lib/router/index.js:335:12)
    at next (/home/joao/Projetos/home-workspace/casadocodigo-node/node_modules/express/lib/router/index.js:275:10)
    at expressInit (/home/joao/Projetos/home-workspace/casadocodigo-node/node_modules/express/lib/middleware/init.js:40:5)
    at Layer.handle [as handle_request] (/home/joao/Projetos/home-workspace/casadocodigo-node/node_modules/express/lib/router/layer.js:95:5)

Alguém pode por favor me ajudar a encontrar o erro?

Agradeço as resposta desde já.

3 respostas

onde e como você está importando essa classe aqui ?

class ProdutoBanco {
    constructor(connection) {
        this._connection = connection;
    }

    lista(callback) {
        this._connection.query('select * from livros', callback);
    }
}

module.exports = (connection) => new ProdutoBanco(connection);
solução!

O erro provavelmente ta na importação do modulo, no primeiro exemplo ele exportava uma função que retornava a sua função ProdutoBanco, porém no segundo vc está retornando uma instância dessa classe, tem que ver isso

Fala galera, obrigado a todos que tentaram me ajudar, descobri o erro aqui. Vc tinha Razão Vitor, eu cometi um pequeno erro na na hora de exportar o módulo antes eu fazia assim:

module.exports = (connection) => new ProdutoBanco(connection);

Mas a forma correta é assim:

module.exports = (connection) => ProdutosDAO;

Flw!