2
respostas

Isolar código acesso a dados - pagamentos.js

Quero isolar este trecho de código logo abaixo dentro da function, tendo em vista que o mesmo se repete várias vezes nas outras chamadas de métodos(delete, post, etc). Qual seria a melhor forma de fazer isso?

 var connection = app.persistencia.connectionFactory();
  var pagamentoDao = new app.persistencia.PagamentoDao(connection);
module.exports = function (app) {
    app.put('/pagamentos/pagamento/:id', function(req, res){

    var pagamento = {};
    var id = req.params.id;

    pagamento.id = id;
    pagamento.status = 'CONFIRMADO';

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

    pagamentoDao.atualiza(pagamento, function(erro){
        if (erro){
          res.status(500).send(erro);
          return;
        }
        console.log('pagamento criado');
        res.send(pagamento);
    });
  });
}
2 respostas

Boa noite, Kauan! Como vai?

Veja se assim as coisas funcionam da forma como vc deseja:

function getDao(app) {
     var connection = app.persistencia.connectionFactory();
     return new app.persistencia.PagamentoDao(connection);
} 

module.exports = function (app) {
    app.put('/pagamentos/pagamento/:id', function(req, res){

    var pagamento = {};
    var id = req.params.id;

    pagamento.id = id;
    pagamento.status = 'CONFIRMADO';

    var pagamentoDao = getDao(app);

    pagamentoDao.atualiza(pagamento, function(erro){
        if (erro){
          res.status(500).send(erro);
          return;
        }
        console.log('pagamento criado');
        res.send(pagamento);
    });
  });
}

Veja que tudo que eu fiz foi isolar o trecho de código da criação do DAO dentro de uma função que recebe o parâmetro app! E chamo essa função no momento em que preciso do DAO!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Olá Gabriel, funcionou desta forma, obrigado.

Em java costumo isolar o acesso a dados dentro da camada service e não no controller, o que acha dessa abordagem? Em Node é prática fazer desta forma mesmo chamando a camada de acesso à dados de dentro do controller?

Outra coisa, quero isolar as constantes num arquivo separado. Como faço pra fazer o import pra dentro do controller? Se eu pedir pro consign monitorar o diretório que vou deixar o arquivo de constantes consigo acessá-lo de dentro do controller? Como fazer?