Segue o erro: app.persistencia.PagamentoDao is not constructor
Segue o erro: app.persistencia.PagamentoDao is not constructor
Olá Pablo, tudo bem?
Poderia postar aqui no fórum o código do seu pagamentos.js
e do PagamentoDao.js
para que a gente possa estar dando uma olhada? :)
Abraços e Bons Estudos!
Código do pagamentos.js:
module.exports = function(app){
app.get("/pagamentos", function(req, res){
console.log("Recebida requisição de teste na porta 3000.")
res.send("OK.");
});
app.post("/pagamentos/pagamento", function(req, res){
req.assert("forma_de_pagamento",
"Forma de pagamento eh obrigatorio").notEmpty();
req.assert("valor",
"Valor de pagamento eh obrigatorio e deve ser um decimal").notEmpty().isFlot();
var erros = req.validationErrors();
if(erros){
console.log("Erros de validacao encontrados");
res.status(400).send(erros);
return;
}
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(erro, resultado){
if(erros){
console.log("Erro ao inserir no banco:" + erros);
res.status(201).send(erros);
}else{
console.log("Pagamento criado");
res.json(pagamento);
}
});
});
}
Código do 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);
}
module.exports = function (connection) {
return PagamentoDao;
}
Olá Pablo,
Que estranho, eu tentei rodar seu código e corrigindo algumas coisas e já funcionou mas não tinha nada muito haver com o construtor do Dao, de qualquer forma pode fazer duas pequenas alterações e testar se funciona?
Primeiro no PagamentoDao.js
lá embaixo na module.exports não precisamos passar connection como argumento, pois veja que nem utilizamos :)
Agora algo que pode ter dado erro foi no pagamentos.js
, você cometeu um erro de digitação na hora de utilizar o assert
:
req.assert("valor",
"Valor de pagamento eh obrigatorio e deve ser um decimal").notEmpty().isFlot();
Você colocou isFlot()
quando deveria ser isFloat()
e isso gera erros ao análisar a requisição
Caso não tenha funcionado me avisa que eu analiso novamente, e ai já posta o código do seu custom-express.js
para eu dar uma olhada
Abraços e Bons Estudos!
Fiz essa alteração e o erro ainda persiste: TypeError: app.persistencia.PagamentoDao is not a constructor
Código do custom-express.js:
var express = require("express");
var consign = require("consign");
var bodyParser = require("body-parser");
var expressValidator = require("express-validator");
module.exports = function(){
var app = express();
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(expressValidator());
consign()
.include("controllers")
.then("persistencia")
.into(app);
return app;
}
Usei o postman, usando o "pagamento.json":
{
"forma_de_pagamento":"payfast",
"valor":10.98,
"moeda":"BRL",
"descricao":"criando um pagamento"
}
e voltou o mesmo erro:
TypeError: app.persistencia.PagamentoDao is not a constructor.
Fiz um teste, uma alteração no código no qual eu retirei os códigos do custom-express.js e apenas teve o erro: TypeError: req.assert is not a function.
var expressValidator = require("express-validator");
app.use(expressValidator());
Olá Pablo, tudo bem?
Está bem estranho esse erro mesmo, pois eu já troquei todos os códigos do professor pelo seu e continuou funcionando normalmente, e já chequei qualquer erro de digitação ou lógica, e não há nenhum fora aquele do flot
, você pode fazer mais um teste?
Faz o download do projeto do final do capitulo 2: Projeto Capitulo - 2
E tente executar normalmente para ver se também persiste o erro
O erro de app.persistencia.PagamentoDao is not a constructor
só pode acontecer no arquivo PagamentoDao
na hora de exportar a função, porque ai no nosos pagamento.js
iriamos querer passar um parâmetro que não existe, entretanto se o seu código está assim:
module.exports = function(){
return PagamentoDao;
}
Não era para dar nenhum tipo de erro
Qualquer coisa estou a disposição :)
Abraços e Bons Estudos!
Boa Tarde Pablo,
Acredito que tenha a ver com a ordenação de carregamento dos módulos, tenta alterar o consign assim :
consign()
.include("persistencia")
.then("controllers")
.into(app);