1
resposta

Erro de Timeout da conexão não tratado

Boa tarde,

Terminei o curso, mas fui adaptando para postgres o bd que é o que usamos aqui na empresa. Só que quando a conexão não funciona, por exemplo ao não encontrar o host a aplicação não consegue seguir a página de erro 500 não é exibida. Ele fica tentando a conexão por aproximadamente 75s então acaba entrando no middleware de tratamento de erros mas não envia para a página de erro. A requisição então morre no navegador ao dar timeout por não receber nenhuma resposta. Se alguém tiver alguma ideia, agradeço.

Segue o código:

express.js

var express = require('express');
var load = require('express-load');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');
var expressPromise = require('express-promise');

module.exports = function() {

  var app = express();

  app.use(express.static('./app/public'))
  app.set('view engine', 'ejs');
  app.set('views', './app/views');

  app.use(expressPromise());

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

  load('routes', {cwd: 'app'})
    .then('infra')
    .into(app);

  app.use(function(request, response, next){
    response.status(404).render('erro/404');
  });

  app.use(function(error, request, response, next){
    if (error) {
      if (!process.env.NODE_ENV) {
        console.log(error);
        console.log('Renderizar página de erro.');
    //a requisição chega aqui, mas não sei pq não renderiza a página
        response.status(500).render('erro/500');
        return;
      }
      next(error);
    } else {
      next();
    }

  });

  return app;
}

connectionFactory.js

var pgp = require('pg-promise')();
var db;

if (!process.env.NODE_ENV) {
  var connectionString = "postgres://qgdefwysamxxra:Bv_XPqpiltHwoDx1FU_BwwV-EU@ec2-50-19-222-159.compute-1.amazonaws.com:5432/d43dstqa82e03e";
  //var connectionString = "postgres://postgres:root@localhost:5432/casadocodigo_nodejs";
}

if (process.env.NODE_ENV == 'dev') {
  var connectionString = "postgres://postgres:root@localhost:5432/casadocodigo_nodejs";
}

if (process.env.NODE_ENV == 'test') {
  var connectionString = "postgres://postgres:root@localhost:5432/casadocodigo_nodejs_test";
}

db = pgp(connectionString);

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

ProdutoDao.js

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

ProdutosDao.prototype.lista = function() {
  var results = [];

var conexao2 = this._connection;

  return new Promise(function(resolve, reject){
    conexao2.query('SELECT * FROM livdasdasdros')
      .then(function(data){
        resolve(data);
      }, function(erro){
        console.log(erro);
        reject(erro);
      }).catch(function(erro){
        console.log('Entrou no catch do DAO');
        console.log(erro);
        reject(new Error('Ocorreu um erro'));
      });
  });
};

/*ProdutosDao.prototype.salva = function(produto, callback) {
  this._connection.query('INSERT INTO livros set ?', produto, callback);
};*/

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

home.js

module.exports = function(app) {
  app.get('/', function(request, response, next){

    var connection = app.infra.connectionFactory;
    var produtosDao = new app.infra.ProdutosDao(connection);

    var produtosPromise = produtosDao.lista();
    produtosPromise.then(function(data){
      console.log(data);
      response.render('home/index', {livros: data});
    }).catch(function(erro){
      console.log('Entrou no catch do home.route');
      next(erro);
    });

  });
}
1 resposta

você já tentou debugar ? o vscode tem um debug muito bom para você ir navegando e ele é super compatível com o js