Skip to content

Repositório que é um checklist para uso do Sequelize desde a instalação até a configuração de um Model.

Notifications You must be signed in to change notification settings

adrianomonteiroweb/sequelize-checklist

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Sequelize Checklist

Repositório que é um checklist para uso do Sequelize desde a instalação até a configuração de um Model.

Requisitos:

NPM ou Yarn para instalação, inicialização e gerenciamento do sequelize.

Instalando o sequelize:

Comando se você usa NPM:

npm i sequelize
npm i sequelize-cli -D

Comando se você usa Yarn:

yarn add sequelize
yarn add sequelize-cli -D

Instale também o módulo referente ao banco que for utilizar junto ao sequelize. Como por exemplo pg para postgres ou mysql2 para mysql. Para isso o comando no caso de uso do postgres seria:

npm i pg

Iniciando o sequelize:

Para iniciar o sequelize, vamos usar comandos de execução que se você usa NPM será nxp, e se você usar Yarn, será o próprio yarn.

npx sequelize init

ou

yarn sequelize init

Nesse ponto é possível reorganizar as pastas como queira. Após isso, será preciso criar o arquivo .sequelizerc na raiz de seu projeto para definir o caminho correto das pastas.

Resolvendo caminho de pastas.

Use o módulo path com o método resolve para informar ao sequelize as disposição das pastas em seu projeto. Neste repositório tem a pasta src e o arquivo .sequelizerc para exemplificar melhor.

const path = require("path");

module.exports = {
  config: path.resolve("src", "config", "database.js"),
  "models-path": path.resolve("src", "app", "models"),
  "seeders-path": path.resolve("src", "database", "seeders"),
  "migrations-path": path.resolve("src", "database", "migrations"),
};

Configurações:

Dentro da pasta "config", o arquivo em formado .json estará por padrão com 3 ambientes a ser configurados. Mas vamos iniciar apenas com 1 ambiente e no formato .js já que vamos precisar importar variáveis de ambiente para deixar nossa configuração mais dinâmica.

Atenção para informar corretamente os dados de seu banco, como host, user, password, database e o dialeto, que no exemplo abaixo é postgres.

module.exports = {
  host: "127.0.0.1",
  username: "myuser",
  password: "mypassword",
  database: "mydatabase",
  dialect: "postgres",
  operatorsAliases: false,
  logging: false,
  define: {
    timestamps: true,
    unserscored: true,
    unserscoredAll: true,
  },
};

Criando uma migration.

Que é um controle de versão no nosso banco de dados referente a dados específicos, como no exemplo a seguir, "users". Evitando problemas de gerenciamento de dados desatualizados pelo uso de mais de 1 desenvolvedor.

npx sequelize migration:create --name=users-create

ou

yarn sequelize migration:create --name=users-create

Depois de criada, vamos configurar:

"use strict";

module.exports = {
  async up(queryInterface, Sequelize) {
    // cria a tabela com o nome "users"
    return queryInterface.createTable("users", {
      id: {
        type: Sequelize.INTEGER, // tipo
        primaryKey: true, // chave primária
        autoIncrement: true, // auto-incrementável
        allowNull: false, // campo obrigatório
      },
      name: {
        type: Sequelize.STRING,
        allowNull: false,
      },
      email: {
        type: Sequelize.STRING,
        unique: true, // Valor não pode se repetir
        allowNull: false,
      },
      password_hash: {
        // senha incriptada
        type: Sequelize.STRING,
        allowNull: false,
      },
      created_at: {
        // data de criação
        type: Sequelize.DATE,
        allowNull: false,
      },
      updated_at: {
        // data de atualização
        type: Sequelize.DATE,
        allowNull: false,
      },
    });
  },

  // dropa (deleta) a tabela
  async down(queryInterface, Sequelize) {
    queryInterface.dropTable("users");
  },
};

Agora podemos executar a tabela com o comando:

npx sequelize db:migrate

ou

yarn sequelize db:migrate

Crie o model User.js

Na pasta "models", crie o arquivo "User.js" e crie a função de definição de tipos de dados referente a tabela de usuário.

module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define("User", {
    name: DataTypes.STRING,
    email: DataTypes.STRING,
    password_hash: DataTypes.STRING,
  });

  return User;
};

ATENÇãO!!!

Vamos configurar o arquivo index de configuração na pasta models.

Como mudamos o arquivo de configuração para .js para receber variáveis de ambiente posteriormente, vamos precisar fazer algumas alterações no arquivo index da pasta model. Isso porque o tal arquivo index, serve para fazer com que os models que criarmos dentro da pasta models, fiquem disponíveis para o sequelize.

Podemos remover a linha 7:

const env = process.env.NODE_ENV || "development";

Na nova linha 7, remova o dirname, o array de env e aponte agora o caminho para o arquivo na pasta config:

Antes:

const config = require(__dirname + "/../config/config.json")[env];

Depois:

const config = require("../../config/database");

No código da linha 10 à 20. Vamos remover a condição IF deixando apenas o resultado de condição verdadeira armazenado em uma const. Além disso, vamos passar ao sequelize os parâmetros de forma diferente.

Antes:

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
  );
}

Depois:

const sequelize = new Sequelize(
  config.database,
  config.username,
  config.password,
  config
);

Import o model User e é hora de testar, como por exemplo em alguma rota:

const routes = require("express").Router();
const { User } = require("./app/models");

User.create({
  name: "Adriano",
  email: "[email protected]",
  password_hash: "12345678910",
});

module.exports = routes;

About

Repositório que é um checklist para uso do Sequelize desde a instalação até a configuração de um Model.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published