Sequelize e PostGress error em um model

Olá eu estou com um problema
eu criei minha table no pgAdmin4:

image

e o meu model:

const Sequelize = require('sequelize');
const db = require('../config/dataBase');

const Users = db.define('TB_USER', {
    name:{
        type: Sequelize.STRING
    },
    email:{
        type: Sequelize.STRING
    },
    password:{
        type: Sequelize.STRING
    }
})
module.exports = Users;

minha config.js

const Sequelize = require('sequelize');
module.exports =  new Sequelize('game', 'postgres', '3613',{
    host:'localhost',
    dialect: 'postgres',
    operatorsAliases:false,

    pool:{
        max:5,
        min:0,
        acquire: 30000,
        idle: 10000
    },
});

meu routes:

const express = require('express');
const router = express.Router();
const db = require('../config/dataBase');
const Users = require('../models/Users')

router.get('/',(req,res) => 
    Users.findAll()
    .then(users => {
        console.log(users)
        res.sendStatus(200);
    })
    .catch(err => console.log(err)) 
);
router.get('/add', (req,res) => {
    const data = {
        name:'biel',
        email:'xd@gmail.com',
        password:'36134427'
    }
    let {name,email,password} = data;
    Users.create({
        name,
        email,
        password
    })
    .then(users => res.redirect('/users'))
    .catch(err => console.log(err));
});


module.exports = router;

mas estou com o seguinte error ao tentar utilizar o .create:

Executing (default): INSERT INTO "TB_USERs" ("id","name","email","password","createdAt","updatedAt") VALUES (DEFAULT,$1,$2,$3,$4,$5) RETURNING *;
DatabaseError [SequelizeDatabaseError]: relation "TB_USERs" does not exist

ele ta executbando como TB_USERs mesmo eu tendo colocado TB_USER

( eu não sei oq poderia melhorar nesse codigo, se alguém puder dar dicas).

“Relação (tabela) TB_USERs não existe” : não existe mesmo! A sua tabela se chama TB_USER, sem esse ‘s’ no final.

Existe a conversão do sequelize onde o mesmo coloca um s ou pluraliza o banco de dados, exemplo:

const Sequelize = require('sequelize');
const { sequelize } = require('../configurations/index');

class Todo extends Sequelize.Model {}
Todo.init(
    {
        id: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        description: {
            type: Sequelize.STRING,
            allowNull: false,
            validate: {
                notNull: true,
                notEmpty: true,
                max: 100
            }
        },
        done: {
            type: Sequelize.INTEGER,
            allowNull: false,
            validate: {
                isInt: true,
                notNull: true
            }
        }
    },
    {
        modelName: 'todos',
        timestamps: false,
        freezeTableName: true,
        underscored: false,
        tableName: 'todos'
        sequelize
    }
)

module.exports = Todo;

no seu caso faltou configurar o segundo objeto logo abaixo dos tipos! na chave

  • freezeTableName: true, //para não pluralizar o nome do modelo
  • tableName: 'todos' // para o nome da tabela

falta configuração

1 curtida

no caso está faltando

{
    modelName: 'todos',
    timestamps: false,
    freezeTableName: false,
    underscored: false,
    sequelize
}

?

Só uma dúvida ( eu comecei a mexer com nodejs por agora), esse modelName, seria o nome da tabela?
fiquei um pouco confuso com esse outro objeto

eu edite a minha resposta, observe lá! por favor

1 curtida

Muito obrigado Dragoon !!

O que você achou da forma em que organizei ? Eu não sei se fiz da melhor forma, se você tiver alguma dica para me dar com relação a isso de organização de model routes / controller.

O pessoal faz com um framework AdonisJS porque é bem organizado, agora quando a gente faz, pra mim foi tentativa e erros, se você conseguir padronizar tudo e ter lógica o que interessa…

1 curtida

Organização de Pastas: (minha não segui nenhum modelo)

1 curtida

Opa mano sei que já me tirou essa dúvida, mas estou tentando refazer tudo inclusive essa parte do model:

const { sequelize } = require('../configurations/index');

você poderia me dizer o que e qual formato vc salva nesse index, e sobre essa variável

salt const { salt } = require('../auth/index'); 

se você poder também , se for possível valeu mesmo.

aqui seria: o formato é o padrão das pastas que é index.js


Aqui seria somente assim, mas, ignore por enquanto isso, porque isso é para criação de senha:

const { salt } = require('../auth/index');

eu consegui :

const bcrypt = require('bcrypt');

const saltRounds = 10;

module.exports.salt= function(){

return bcrypt.genSaltSync(saltRounds); } 

ai eu pego o salt

let password = await bcrypt.hashSync(req.body.password, salt());

1 curtida