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

DAO não é function

pessoal, ao acessar o endereço localhost/list não é encontrado a função do meu DAO

Vide o console.log

router.get('/list', function(req, res, next) {
  var conn = connFactory();  
  var pessoasDAO = require('../infra/pessoas')(conn);
  pessoasDAO.lista(function(err,results){
    console.log('NÃO EXECUTA AQUI');
    res.render('list',{lista: results});
  });
  conn.end(); 
});

MEU DAO ( a area comentada funcionava)

function PessoasDAO(conn){
    this._conn = conn;
}

PessoasDAO.prototype.lista = function(callback){
    this._conn.query('select * from pessoas', callback);
}

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


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

alguém ve o problema?

4 respostas

Essa DAO usa uma função construtora, que precisa do new.

Ficaria assim:

  var pessoasDAO = new require('../infra/pessoas')(conn);

Se o código tá meio esquisito, dá pra fazer algo como:

  var PessoaDAO = require('../infra/pessoas');
  var pessoasDAO = new PessoaDAO(conn);

coloquei o new, mas ainda estou com o mesmo problema

TypeError: pessoasDAO.lista is not a function
    at C:\Users\Vinicius\Desktop\desafio\routes\index.js:33:14
    at Layer.handle [as handle_request] (C:\Users\Vinicius\Desktop\desafio\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\Vinicius\Desktop\desafio\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\Vinicius\Desktop\desafio\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\Vinicius\Desktop\desafio\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\Vinicius\Desktop\desafio\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\Vinicius\Desktop\desafio\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\Vinicius\Desktop\desafio\node_modules\express\lib\router\index.js:275:10)
    at Function.handle (C:\Users\Vinicius\Desktop\desafio\node_modules\express\lib\router\index.js:174:3)
    at router (C:\Users\Vinicius\Desktop\desafio\node_modules\express\lib\router\index.js:47:12)
solução!

Ah, tem um detalhe!

Já que você não está usando o express-load, muda ligeiramente o código. Esse express-load espera que seja retornada uma função, que ele vai invocar.

Então, você vai ter que invocar na mão na hora de dar o require:

var PessoaDAO = require('../infra/pessoas')();
var pessoasDAO = new PessoaDAO(conn);

Agora sim ficou show! É meio complicado para mim que venho do OO java. Obrigado.