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

Como criar contrutores Javacript

estou tentando instanciar um novo objeto (ex. var dao = new app.persistencia.PersistenciaDao(connection)), mas no log me retorna apenas que = TypeError: app.persistencia.PagamentoDao is not a constructor

6 respostas

Luis, posta aqui o que está presente no arquivo PersistenciaDAO, por favor?

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

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

PagamentoDao.prototype.lista = function(callback) { this._connection.query('SELECT * FROM pagamentos', callback); }

PagamentoDao.prototype.buscaPorId = function(id, callback) { this._connection.query('SELECT * FROM pagamentos WHERE id = ?', id, callback); }

PagamentoDao.prototype.delete = function(id, callback) { this._connection.query('DELETE FROM pagamentos WHERE id = ?', id, callback); }

Boa noite Luiz, tudo bem?

Faz um favor, da um print nesta variável app.persistencia. Esta parecendo que a referência da variável PersistenciaDao não existe.

index.js

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

app.listen(3000, function(){
  console.log('Servidor rodando na porta 3000.');
});

custom-express.js

var express = require('express');
var consign = require('consign');
var bodyParser = require('body-parser');

module.exports = function() {
    var app = express();

    app.use(bodyParser.urlencoded({extended: true}));
    app.use(bodyParser.json());

    consign()
      .include('controllers')
      .then('persistencia')
      .into(app);

    return app;
};

pagamentos.js


module.exports = function(app) {
  app.get('/pagamentos', function(req, res){
    console.log('Recebida requisicao de teste na porta 3000.');
    res.send('Ok.');
  });

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

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

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

    dao.salva(pagamento, function(erro, resultado){
        console.log('pagamento criado.');
        res.json(pagamento);
    });

    res.send(pagamento);
  });
};

connectionFactory.js

var mysql = require('mysql');

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

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

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.lista = function(callback) {
  this._connection.query('SELECT * FROM pagamentos', callback);
}

PagamentoDao.prototype.buscaPorId = function(id, callback) {
  this._connection.query('SELECT * FROM pagamentos WHERE id = ?', id, callback);
}

PagamentoDao.prototype.delete = function(id, callback) {
  this._connection.query('DELETE FROM pagamentos WHERE id = ?', id, callback);
}
solução!

Oi Luis, você precisa exportar a função construtora para o Node poder utilizar.

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

isso mesmo Wanderson, obrigado pela disposição e pelo tempo...