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);
});
});
}