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

Configuration property "mysql.database" is not defined

Olá pessoal, tive o seguinte problema ao usar a config dentro do banco de dados:

throw new Error('Configuration property "' + property + '" is not defined');
petshop |     ^
petshop | 
petshop | Error: Configuration property "mysql.database" is not defined

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Essa acima é minha estrutura de pastas do projeto, no arquivo index.js eu consigo acessar a config da porta, porém dentro de database/index.js da o erro que citei acima.

Esse é meu database/index.js. Como podem ver se eu acessar diretamente ele se conecta e cria a tabela e a conexão, porém se eu usar a config (Que está comentada por esse motivo) da o erro de undefined.

const Sequelize = require('sequelize');
const config = require('config');

const db = new Sequelize(
    //config.get('mysql.database'),
    "petshop",
    //config.get('mysql.user'),
    "root",
    //config.get('mysql.password'),
    "root",
    {
        //host: config.get('mysql.host'),
        host: "petshop_db",
        dialect: 'mysql'
    }
);

module.exports = db;

Esse é meu arquivo de configuração:

{
    "mysql": {
        "database": "petshop",
        "user": "root",
        "password": "root",
        "host": "petshop_db"
    },
    "app": {
        "port": 3000
    }
}

Estou usando docker em meu projeto mas creio que isso não seja o motivo, porém irei citar as versões dos pacotes instalados para caso tenha algo relacionado:

  "dependencies": {
    "body-parser": "^1.19.2",
    "config": "^3.3.7",
    "express": "^4.17.3",
    "mysql2": "^2.3.3",
    "nodemon": "^2.0.15",
    "sequelize": "^6.17.0"
  }

Alguém sabe uma forma de solucionar essa questão? Desde ja agradeço e bons estudos a todos.

2 respostas

Fala Igor, esse erro tem cara de que você escreveu alguma informação incorreta ou está faltando info. Como vc está usando um arquivo de config, seria interessante usá-lo da seguinte forma.

const Sequelize = require('sequelize')
const config = require('config')

const db = new Sequelize(
    config.get('mysql.database'),
    config.get('mysql.user'),
    config.get('mysql.password'),
    {
        host: config.get('mysql.host'),
        dialect: 'mysql'
    }
)

module.exports = db

Outra situação, seria interessante confirmar se as informações de usuário e senha no docker estão corretas. Eu geralmente uso docker tbm e não tenho problemas, o que vejo o pessoal errando normalmente é o nome do host, que precisa ser o mesmo lá do docker que vc colocou no service.

solução!

Olá Jonatam, obrigado pela resposta, infelizmente acredito não seja nada disso, o uso da config está exatamente igual ao que você sugeriu, apenas está comentado em meu código pois não estava funcionando. Sobre o docker também está tudo Ok, uma vez que os containers estão se comunicando. Algo me diz que está relacionado ao caminho do config, pois se eu mover a pasta config para dentro de database, ele funciona porém no index onde acesso a porta para de funcionar.

Att: O erro estava no package.json, na propriedade main. Estava setado o caminho /api/index.js porem no meu caso era apenas index.js