2
respostas

[Bug] "Cannot read properties of undefined (reading 'findAll')"

Estou tendo um problema ao tentar ler os dados da database que foi feita. O postman, me dá o seguinte erro:

Cannot read properties of undefined (reading 'findAll')

Vi algumas pessoas falando para alterar a linha 21 de ./api/models/index.js mas não aconteceu nada...

models/index.js

'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}

fs
  .readdirSync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(file => {
    const model = sequelize['import'](path.join(__dirname, file));
    db[model.name] = model;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

controllers/PessoaController

const database = require('../models/pessoas');

class PessoaController {
   static async pegaTodasAsPessoas(req, res){
      try{
         const todasAsPessoas = await database.Pessoas.findAll();
         return res.status(200).json(todasAsPessoas);
      } catch (error) {
         return res.status(500).json(error.message); 
      };
   };
};

module.exports = PessoaController;
2 respostas

Atualização: Se alterar no controlador a importação de pessoas para index funciona...

Mas ainda estou com um pouco de dúvida sobre o motivo.

Oi, Otavio, tudo bem?

No caso, como nesse projeto é utiliza um ORM, e o mesmo cria alguns arquivos e pastas como, por exemplo, o próprio "models", ele acaba construindo alguns arquivos de gerenciamento, como o "index.js" presente na pasta "models", e vai ser responsável de fazer essa ligação dos modelos criados dentro da pasta com os arquivos externos que o utilizam, que no caso seria o controlador.

Então de forma geral, o erro acabou ocorrendo porque você está utilizando uma biblioteca que precisa que seja seguida uma estrutura rígida de relação de arquivos e formas de importações.

Espero ter esclarecido sua dúvida. Caso tenha mais perguntas sobre o erro, estarei à disposição.

Grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software