- Iniciar a aplicação
npm init -y
- Instalar o sequelize
npm install sequelize
- Instalar a CLI
npm install sequelize-cli
- Instalar o mysql2
npm install mysql2
- Atalho
npm install sequelize sequelize-cli mysql2
- Inicializar o Sequelize
npx sequelize-cli init
- Configurar o arquivo config.json gerado pelo init do CLI
// config/config.json
{
"development": {
"username": "root",
"password": "",
"database": "revisao_bloco_24",
"host": "127.0.0.1",
"dialect": "mysql"
}
// No resto do arquivo você vai encontrar as convenções para conectar o Sequelize em outros ambientes
}
- Usando variáves de ambiente no config.
7.1. Instale o dotenv na raiz da aplicação
npm install dotenv
7.2. Mude o nome do arquivo de config.json para config.js e exporte o objeto de configuração
// config/config.js
module.exports = {
"development": {
"username": "root",
"password": "",
"database": "revisao_bloco_24",
"host": "127.0.0.1",
"dialect": "mysql"
}
// No resto do arquivo você vai encontrar as convenções para conectar o Sequelize em outros ambientes
}
7.3. Crie um arquivo .env na raiz do projeto e adicione as variáveis de ambiente nele
<!-- .env -->
MYSQL_USER=root
MYSQL_PASSWORD=senha
MYSQL_DATABASE=database_development
MYSQL_HOSTNAME=127.0.0.1
7.4. Importe as variáves de ambiente dentro do config.js
// config/config.js
require('dotenv').config(); // Possibilita o acesso às variáveis de ambiente de dentro deste arquivo
module.exports = {
"development": {
"username": process.env.MYSQL_USER,
"password": process.env.MYSQL_PASSWORD,
"database": process.env.MYSQL_DATABASE,
"host": process.env.MYSQL_HOSTNAME,
"dialect": "mysql"
}
// No resto do arquivo você vai encontrar as convenções para conectar o Sequelize em outros ambientes
}
7.5. Alterar dentro do arquivo models/index.js de config.json para config.js
// models/index.js
// Antes
// [...]
const config = require(__dirname + '/../config/config.json')[env];
// [...]
// Depois
// [...]
const config = require(__dirname + '/../config/config.js')[env];
// [...]
- Criar o banco usando o CLI do Sequelize
npx sequelize db:create
- Criar um model
npx sequelize model:generate --name User --attributes fullName:string
- Alterar o model do formato de classe:
// models/user.js
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class User extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
}
};
User.init({
fullName: DataTypes.STRING
}, {
sequelize,
modelName: 'User',
});
return User;
};
Para função:
// models/user.js
const User = (sequelize, DataTypes) => {
const User = sequelize.define("User", {
fullName: DataTypes.STRING,
email: DataTypes.STRING,
}, {
underscored: true
});
return User;
};
module.exports = User;
- Alterar as migrations, caso seja necessário
// migrations/XXXXXXXXXXXXX-create-user.js
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
fullName: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('Users');
}
};
- Executar a migration
npx sequelize db:migrate
Caso queira reverter:
npx sequelize db:migrate:undo
Caso seja necessária a modificação de alguma tabela, você pode rodar um comando para gerar uma nova migration e então fazer as alterações que você precisar:
npx sequelize migration:generate --name add-column-phone-table-users
// migrations/XXXXXXXXXXXXX-add-column-XXXXXXX.js
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('Users', 'phone_num', {
type: Sequelize.STRING,
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('Users', 'phone_num');
}
};
Em seguida rodar o comando para executar a nova migration:
npx sequelize db:migrate
E alterar o model para incluit a nova coluna:
// models/user.js
const User = (sequelize, DataTypes) => {
const User = sequelize.define("User", {
fullName: DataTypes.STRING,
email: DataTypes.STRING,
phone_num: DataTypes.STRING,
});
return User;
};
module.exports = User;
- Criar um novo seed
npx sequelize seed:generate --name users
- Adicionar as informações que serão colocadas no banco
// seeders/XXXXXXXXXXXXX-user.js
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => queryInterface.bulkInsert('Users',
[
{
fullName: 'Leonardo',
email: 'leo@test.com',
phone_num: '999999999',
createdAt: Sequelize.literal('CURRENT_TIMESTAMP'),
updatedAt: Sequelize.literal('CURRENT_TIMESTAMP'),
},
{
fullName: 'Eduardo',
email: 'edu@test.com',
phone_num: '888888888',
createdAt: Sequelize.literal('CURRENT_TIMESTAMP'),
updatedAt: Sequelize.literal('CURRENT_TIMESTAMP'),
},
], {}),
down: async (queryInterface) => queryInterface.bulkDelete('Users', null, {}),
};
- Executar o seed
npx sequelize db:seed:all
E para reverter:
npx sequelize db:seed:undo:all
- Adicionar um segundo objeto dentro do método
sequelize.define()
na model
// models/user.js
const User = (sequelize, DataTypes) => {
const User = sequelize.define("User", {
fullName: DataTypes.STRING,
email: DataTypes.STRING,
phone_num: DataTypes.STRING,
}, {
timestamps: false,
});
return User;
};
- Remover as referências das colunas na migration
// migrations/XXXXXXXXXXXXX-create-user.js
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
fullName: {
type: Sequelize.STRING
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('Users');
}
};
- Remover as referências das colunas no seeder
// seeders/XXXXXXXXXXXXX-user.js
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => queryInterface.bulkInsert('Users',
[
{
fullName: 'Leonardo',
phone_num: '999999999',
},
{
fullName: 'Eduardo',
phone_num: '999999998',
},
], {}),
down: async (queryInterface) => queryInterface.bulkDelete('Users', null, {}),
};
Excelente! Muito bem estruturado.