3
respostas

app.persistencia.PagamentoDao is not a constructor

Galera, eu fazendo a aula 2 do curso e estou com o seguinte erro

app.persistencia.PagamentoDao is not a constructor, já olhei as outras dúvidas e não to conseguindo acertar, alguma luz?

Vou deixar os códigos das classes:

PagamentoDao.js

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

PagamentoDao.prototype.salva = function(pagamento,callback) {
    this._connection.query('INSERT INTO pagamentos SET ?', pagamento, callback);
}

PagamentoDao.prototype.buscaPorId = function (id,callback) {
    this._connection.query("select * from pagamentos where id = ?",[id],callback);
}

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

connectionFactory.js

var mysql  = require('mysql');

function createDBConnection(){
        return mysql.createConnection({
            host: 'localhost',
            user: 'root',
            password: '',
            database: 'payfast'
        });
}

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

Pagamentos.js

module.exports = function (app) {

  app.get('/pagamentos', function (req,res) {
      console.log('Recebendo requisição de teste');
      res.send('Ok.');
  });

  app.post('/pagamentos/pagamento',function (req, res) {
    var pagamento = req.body;
    console.log('processando uma requisição de um novo pagamento');

    pagamento.status = 'CRIADO';
    pagamento.data = new Date;

    var connection = app.persistencia.connectionFactory();
    var pagamentoDao =  new app.persistencia.PagamentoDao(connection);

    pagamentoDao.salva(pagamento,function (error, resultado) {

        console.log('pagamento criado');
        res.json(pagamento);

    })

  });


}
3 respostas

Opa Bruno, muito estranho esse erro tá acontecendo. Pelo que vi, seu código tá certinho, você tem ele no github pra mim testar localmente?

Wanderson, tenho sim.

https://github.com/brunoha/payfast

Bruno, desculpa a demora, testei sua aplicação e o problema é que seu arquivo está com o nome escrito com letra minúscula no inicio e você está escrevendo o nome iniciando com letra maiúscula. Pode isso dá undefined na hora de criar o objeto.

É essa linha:

new app.persistencia.PagamentoDao();

Você pode renomear o arquivo ou mudar no código para:

new app.persistencia.pagamentoDao();

Minha sugestão é renomear o arquivo, já que arquivos com classes são geralmente escritos iniciando com letra maiúscula mesmo.