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

app.model.PagamentoDao is not a constructor

Alguém teve esse erro e conseguiu consertar?

TypeError: app.model.PagamentoDao is not a constructor
    at C:\Users\c1297712\WebstormProjects\untitled2\app\controllers\pagamentos.js:6:28
    at Layer.handle [as handle_request] (C:\Users\c1297712\WebstormProjects\untitled2\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\c1297712\WebstormProjects\untitled2\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\c1297712\WebstormProjects\untitled2\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\c1297712\WebstormProjects\untitled2\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\c1297712\WebstormProjects\untitled2\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\c1297712\WebstormProjects\untitled2\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\c1297712\WebstormProjects\untitled2\node_modules\express\lib\router\index.js:275:10)
    at jsonParser (C:\Users\c1297712\WebstormProjects\untitled2\node_modules\body-parser\lib\types\json.js:110:7)
    at Layer.handle [as handle_request] (C:\Users\c1297712\WebstormProjects\untitled2\node_modules\express\lib\router\layer.js:95:5)
7 respostas

Boa tarde, Vinícius! Como vai?

Vc poderia colar o seu código aqui para que eu possa dar uma olhada e tentar te ajudar?

function SqlFactory(table) {
    this._table = table;
}

SqlFactory.prototype.salva = function () {
    return `INSERT INTO ${this._table} SET ?`;
};

SqlFactory.prototype.list = function () {
    return `SELECT * FROM ${this._table}`;
};

SqlFactory.prototype.findById = function (param) {
    return `SELECT * FROM ${this._table} WHERE ${param.label} = ${param.value}`;
};

SqlFactory.prototype.updated = function (param, id) {
    let query = `UPDATE ${this._table} SET `;
    if (typeof(param) === 'array') {
        param.map(
            (res) => {
                query  += `${res.label} = ${res.value}`;
                return res;
            }
        );
        query += `WHERE ${id.label} = ${id.value}`;
        return query;
    } else {
        query  += `${param.label} = ${param.value}`;
    }
};
module.exports = function () {
    return SqlFactory;
};

Desculpe a demora, muito trabalho... Pode me ajudar a entender onde eu errei

Opa, Vinícius! Sem problema!

Manda tbm o código do PagamentoDao.js e do pagamento.js, por favor.

sqlFactory.js

function SqlFactory(table) {
    this._table = table;
}

SqlFactory.prototype.salva = function () {
    return `INSERT INTO ${this._table} SET ?`;
};

SqlFactory.prototype.list = function () {
    return `SELECT * FROM ${this._table}`;
};

SqlFactory.prototype.findById = function (param) {
    return `SELECT * FROM ${this._table} WHERE ${param.label} = ${param.value}`;
};

SqlFactory.prototype.updated = function (param, id) {
    let query = `UPDATE ${this._table} SET `;
    if (typeof(param) === 'array') {
        param.map(
            (res) => {
                query  += `${res.label} = ${res.value}`;
                return res;
            }
        );
        query += `WHERE ${id.label} = ${id.value}`;
        return query;
    } else {
        query  += `${param.label} = ${param.value}`;
    }
};
module.exports = function () {
    return SqlFactory;
};

pagamentoDAO.js

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

PagamentoDao.prototype.salva = function(pagamento, callback) {
    this._connection.query(this._sqlFactory.salva(), pagamento, callback);
};

PagamentoDao.prototype.lista = function(callback) {
    this._connection.query(this._sqlFactory.lista(), callback);
};

PagamentoDao.prototype.buscaPorId = function (param, callback) {
    this._connection.query(this._sqlFactory.findById(param), callback);
};

PagamentoDao.prototype.atualiza = function(param, id, callback) {
    this._connection.query(this._sqlFactory.update(param, id), callback);
};

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

pagamentos.js

module.exports  =  function(app){
  app.get('/pagamentos', function(req, res){
    console.log('Recebida requisicao de teste na porta 3000.');
    var connection = app.persistencia.connectionFactory();
    var sqlFactory = app.persistencia.SqlFactory('pagamentos');
    var dao = new app.persistencia.PagamentoDao(connection, sqlFactory);
    dao.lista(function (exception, resultados) {
        if (exception !== null) {
            res.status(500).send('Erro ao realizar a consulta' + exception);
        } else{
            res.send(resultados)
        }
    });
  });
};

pagamentos.js - Já fiz dessa forma tbm

module.exports  =  function(app){
  app.get('/pagamentos', function(req, res){
    console.log('Recebida requisicao de teste na porta 3000.');
    var connection = app.persistencia.connectionFactory();
    var sqlFactory = new app.persistencia.SqlFactory('pagamentos');
    var dao = new app.persistencia.PagamentoDao(connection, sqlFactory);
    dao.lista(function (exception, resultados) {
        if (exception !== null) {
            res.status(500).send('Erro ao realizar a consulta' + exception);
        } else{
            res.send(resultados)
        }
    });
  });
};
solução!

Galera descobri o meu erro... Eu mudei o nome do arquivo, descobri aqui agora que o nome deve do arquivo deverá está de acordo com o nome da function:

Exemplo: SqlFactory.js === function SqlFactory(){}