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
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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
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);
}
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...