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

Sem acesso ao banco

Olá, pessoal. Consigo executar meu deploy com sucesso e o Heroku inicia minha aplicação. Contudo, não consigo acessar nenhuma página que acesse meu banco de dados (o que, no caso, são todas, exceto o /produtos/form) e no log do Heroku recebo a mensagem:

TypeError: Cannot read property 'connectionFactory' of undefined

O local do erro varia dependendo da página que tento acessar.

A diferença do meu projeto para o projeto do curso é que estou usando o consign no lugar do express-load. Após instalar o Node 8.0.0 o express-load não funcionava mais e foi necessário fazer esta alteração.

Meu código completo está em https://github.com/antunesjrc/cdc-nodejs

Agradeço desde já.

PS.: Ignorem minhas mensagens de commit hahaha

4 respostas

Oi Antunes, tudo bem? Primeiro deixe-me dar duas dicas:

1 - Não armazene senhas no projeto versionado. Use sempre variáveis de ambiente.

2 - Remova do versionamento o diretório /node_modules ele geralmente é grandinho demais e você não precisa necessariamente dele já que todas as suas depedências estão no package.json

Bom, pelo que vi, de forma alguma a conexão ao banco está sendo realizada efetivamente. Você está exportando a conexão dessa forma:

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

Ou seja, uma função que retorna outra função sem executar. Em algum lugar você precisa executar essa função createDBConnection, mas não o faz, veja:

var connection = app.infra.connectionFactory();
var produtosDAO = new app.infra.ProdutosDAO(connection);

Do jeito que está, no app.infra.connectionFactory você está apenas armazenando a função que cria a conexão, mas não executa, e desse jeito a referência vai passando pelo código inteiro. Você precisa executar a função retornada.

var connection = app.infra.connectionFactory()();

ou

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

Olá, Wanderson! Tudo ótimo e por aí? Ei, obrigado pelas dicas. Eu nem me preocupei com as senhas e não me atentei ao node_modules no versionamento.

Apliquei sua sugestão e o app parou de funcionar completamente. Nem local funcionava. Voltei para o estado anterior e funciona normalmente, acessa ao banco, exibe os dados, insere novos dados e deleta os dados.

Acabei de alterar do ClearDB para o JawsDB e não fez diferença alguma. Tentei acessar o JawsDB localmente e funcionou perfeitamente (select, insert e delete). Não consigo pensar no que pode ser o problema. Para piorar, o erro no log não aparece mais, apenas um erro de conexão quando tento acessar a home (http://cdcnodejszum.herokuapp.com/):

2017-06-06T16:19:37.026334+00:00 heroku[router]: at=info method=GET path="/" host=cdcnodejszum.herokuapp.com request_id=d9080d76-3fbe-43ef-b717-288a5e88117e fwd="177.195.105.85" dyno=web.1 connect=0ms service=4ms status=500 bytes=339 protocol=http

Já cogitei iniciar uma nova aplicação mais simples com um html menor, mas o path '/produtos' deveria mostrar apenas uma tabela 'quase' sem formatação com os dados do banco. E recebo um status 500 mesmo assim.

Obrigado pela ajuda!

solução!

Consegui. Utilizei o package.json do fim do curso e substituí o consign pelo express-load de volta, utilizando as versões do Node e dos módulos do curso. A aplicação funciona normalmente agora.

Obrigado.

Boa Antunes, pena não termos explorado mais o problema. Mas fico feliz que tenha resolvido. Continue estudando!

Bons estudos, abraço!