1
resposta

[Bug] BANCO MSSQL RETORNANDO UM ARRAY VAZIO

Salve Galera!

Estou criando uma API com o Sequelize para fazer consultas em um banco Microsoft SQL Server.

Consegui realizar a conexão com o banco e rodei o método sync para comparar a tabela do banco com o modelo que criei, até ai tudo bem.

Porém, quando faço o teste pelo insomnia, a busca me retorna um array vazio, já tentei fazer a busca mais específica utilizando o findOne e ele me retorna um null.

Conseguem me dar uma luz, do que pode estar acontecendo? Porque ele retorna um status 200 mas não retorna os dados?

Vou colocar aqui meu código para facilitar a compreensão:

Configuração de conexão com o banco:

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

const dbName = process.env.DB_NAME;
const dbUser = process.env.DB_USER;
const password = process.env.DB_PASSWORD;
const dbHost = process.env.DB_HOST;


const sequelize = new Sequelize(dbName, dbUser, password, {
  host: dbHost,
  dialect: 'mssql',
  dialectOptions: {
    options: {
      encrypt: true,
      port: 1433,
    },
  },
});


module.exports = sequelize;

Modelo:

const sequelize = require("../config/db.config");
const { DataTypes } = require('sequelize')

const TOP_10 = sequelize.define("TOP_10", {
  BRICK: {
    type: DataTypes.INTEGER,
    field: 'BRICK',
  },
  SETOR_NEC_ABERTO: {
    type: DataTypes.STRING(200),
    field: 'SETOR_NEC_ABERTO',
  },
  EAN: {
    type: DataTypes.STRING(15),
    field: 'EAN',
  },
  CEP_INICIAL: {
    type: DataTypes.INTEGER,
    field: 'CEP_INICIAL',
  },
  CEP_FINAL: {
    type: DataTypes.INTEGER,
    field: 'CEP_FINAL',
  },
  PRODUTO: {
    type: DataTypes.STRING(66),
    field: 'PRODUTO',
  },
  LABORATORIO: {
    type: DataTypes.STRING(50),
    field: 'LABORATORIO',
  },
  UNIDADES: {
    type: DataTypes.FLOAT,
    field: 'UNIDADES',
  },
  FCC: {
    type: DataTypes.INTEGER,
    field: 'FCC',
  },
  RANK: {
    type: DataTypes.INTEGER,
    field: 'RANK',
  },
}, {
  tableName: 'dbo.TOP_10',
  freezeTableName: true,
  timestamps: false,
});

module.exports = TOP_10;

Controller:

const TOP_10 = require('../models/top10');

// Método para buscar todos os registros
const getAllTOP10 = async (req, res) => {
  try {
    const tops = await TOP_10.findAll({
      attributes: { exclude: ['id'] },
    });
    return res.status(200).json(tops);
  } catch (error) {
    return res.status(500).json({ error: 'Erro ao buscar informações', error });
  }
};

module.exports = {
  getAllTOP10,
};

Arquivo principal da aplicação:

const express = require('express');
const sequelize = require('./config/db.config');
const top10Controller = require('./controllers/top10Controller');


const app = express();
app.use(express.json());

//verifica a conexão com o banco de dados
sequelize.authenticate()
  .then(() => {
    console.log('Conexão com o banco de dados estabelecida com sucesso.');
  })
  .catch((error) => {
    console.error('Erro ao estabelecer conexão com o banco de dados:', error);
  });
  
//Rota para buscar todos os registros
app.get('/tops', top10Controller.getAllTOP10);

const port = 3000;

// Sincronizar o modelo com o banco de dados
sequelize.sync({ force: false })
  .then(() => {
    console.log('Sincronização concluída.');
    app.listen(port, () => console.log(`Server running on port ${port}`));
  })
  .catch((error) => {
    console.error('Erro na sincronização', error);
  });
1 resposta

Oi, Matheus! Tudo bem?

De acordo com o código compartilhado, parece que a configuração da conexão com o banco de dados está correta. No entanto, o problema pode estar relacionado à consulta que está sendo realizada no método getAllTOP10 do controller.

Ao utilizar o método findAll do Sequelize, é importante verificar se o modelo TOP_10 está sendo corretamente importado no controller. Devemos conferir se que o caminho do arquivo está correto e se não há nenhum erro de importação.

Além disso, podemos adicionar um console.log antes do retorno da resposta no controller para verificar se a variável tops está sendo populada corretamente. Por exemplo:

const getAllTOP10 = async (req, res) => {
  try {
    const tops = await TOP_10.findAll({
      attributes: { exclude: ['id'] },
    });
    console.log(tops); // Verifica se a variável tops está sendo populada corretamente
    return res.status(200).json(tops);
  } catch (error) {
    return res.status(500).json({ error: 'Erro ao buscar informações', error });
  }
};

Dessa forma, poderemos verificar no console se a consulta está retornando algum resultado ou se está vazia.

Outra possível causa para o array vazio é a falta de registros no banco de dados que correspondam à sua consulta. Verifique se existem registros na tabela dbo.TOP_10 do banco de dados e se eles atendem aos critérios da consulta.

Espero que essas sugestões possam te ajudar a identificar e resolver o problema. Se tiver mais alguma dúvida, é só perguntar!

Um forte abraço e bons estudos!

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