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

Porque a conexão na rota que salva o produto não foi fechada?

Olá,

no exemplo de cadastro de produtos no capitulo 3 a conexão em nenhum momento não foi fechada como no caso da listagem de produtos. Abaixo seguem o exemplo ilustrado na aula:

 app.post('/produtos', function(request, response) {
        var connection = app.infra.connectionFactory();
        var produtosDAO = new app.infra.ProdutosDAO(connection);

        var produtos = request.body;
        produtosDAO.salva(produtos, function(error, results) {
            response.redirect('/produtos');
        });
    });
4 respostas
solução!

Oi João, tudo bem? A própria documentação tem a maioria dos exemplos sem o uso do end. De alguma forma, o modulo fecha as conexões automaticamente de acordo com alguma estratégia, talvez por timeout.

Talvez o problema em não fechar a conexão nesse ponto não seja tão grave por que temos um redirect ai o que muda o fluxo de execução da aplicação.

Faz sentido?

Aliás, apesar de usarmos o createConnection pra informar os dados de conexão, note que não usamos o connect, isso por que o módulo não obriga, a própria função query abre a conexão caso ela não esteja aberta.

Deixa eu ver se entendi bem,

então devo assumir que a conexão será fechada por padrão quando eu uso o redirect?

Não João, a conexão será fechada por padrão por causa do timeout provavelmente. Se eu não estou enganado, o timeout padrão é de 1 segundo. Depois desse tempo sem usar a conexão, ela será invalidada. Neste caso, o servidor do banco mata a conexão e não você.

O redirect só vai fazer você perder a referência para a conexão.

Contudo, é sempre uma boa ideia fechar. Sinta-se a vontade para alterar o projeto pra fazer isso. :)

Tranquilo Wanderson, obrigado pela resposta, esclareceu minha dúvida. XD