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

TypeError: Cannot read property 'findUser' of undefined

Boa tarde, pessoal

Estou com um problema que não consigo resolver a respeito do consign e do dbDao. Podem me ajudar, por favor?

O que está acontecendo é que ao instanciar o "dbDao" após o connectionFactory o mesmo está dando undefined e eu recebo o erro que coloquei no título. Já procurei algumas situações parecidas e já verifiquei as devidas soluções, nenhuma funcionou.

Enfim, segue o código: custom-express:

var express = require('express');
var consign = require('consign');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');
var morgan = require('morgan');
var logger = require('../services/logger.js');
var path = require('path');

var root = "./";

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

    // view engine setup
    app.set('views', path.join(root, 'views'));
    app.set('view engine', 'pug');

    app.use(express.static(path.join(root, 'public')));

    app.use(morgan("common", {
        stream: {
            write: function (mensagem) {
                logger.info(mensagem);
            }
        }
    }));

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

    app.use(expressValidator());

    consign()
        .include('routes')
        .then('dbDao')
        .then('services')
        .into(app);

    return app;
};

daoPayment:

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

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

daoPayment.prototype.update = function(pagamento, callback) {
    this._connection.query('UPDATE pagamentos SET status = ? where id = ?', [pagamento.status, pagamento.id], callback);
};

daoPayment.prototype.list = function(callback) {
    this._connection.query('select * from pagamentos',callback);
};

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

daoPayment.prototype.findUser = function (passport, callback) {
    this._connection.query("select * from users where user = ? and pswd = ?",[passport.user, passport.pswd], callback);
};

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

rota userAccess:

module.exports = function (app) {

    app.get("/", function (req, res, next) {
        res.render('index', {title: 'SoulPay', usrOrPswdCorrect: true});
    });

    app.post("/authLogin", function (req, res, next) {

        console.log("Req Body: " + req.body);

        var hash = crypto.createHash("sha256");

        var passport = {
            user: req.body.user,
            pswd: req.body.pswd
        };

        var connection = app.dbDao.connectionFactory();
        console.log("connection: " + connection);

        var daoPayment = app.dbDao.daoPayment(connection);
        console.log("daoPayment: " + daoPayment);

        daoPayment.findUser(passport, function (error, ret) {

            if (error) {
                console.log('erro ao consultar no banco: ' + error);
                res.status(500).render("error", {message: "Falha ao consultar o banco de dados", error});
            }

            console.log(ret);
            return true;
        });
    });
};

Obs: Estou criando um outro projeto a partir do que aprendi aqui, por isso dos arquivos daoPayment com findUser e a rota userAccess.

Atenciosamente, Caio Salgado Nepomuceno

3 respostas
solução!

Opa Caio, você não esqueceu de usar um new ali no daoPayment?

Meu, como que pode, né?

Eu me matei procurando um erro e era mesmo a falta de um "new". Muito obrigado, Anderson!

ahaha, acontece Caio! Bons estudos! Qualquer coisa estamos por aqui!