Capacidade de Conexão
npm install mysql2
// ou
yarn add mysql2
Instalação do Driver
ORM
Sequelize
npm install sequelize
// ou
yarn add sequelize
Instalação
const { Sequelize } = require('sequelize');
const bd = {};
const options = {
username: 'admin',
password: 'notes123',
database: 'notes',
host: 'notes.cgssmrnlwpdu.us-east-2.rds.amazonaws.com',
dialect: 'mysql',
};
const sequelize = new Sequelize(options);
sequelize
.authenticate()
.then(() => console.log(`Conectado com sucesso ao banco ${options.database}`))
.catch((err) => console.log(`Falha ao conectar ao banco ${options.database}: ${err}`));
bd.sequelize = sequelize;
bd.Sequelize = Sequelize;
module.exports = bd;
Conexão
Desafio
Modelos
Modelo
module.exports = (sequelize, DataTypes) => {
const Usuario = sequelize.define(
'usuario',
{
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
nome: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: false
},
senha: {
type: DataTypes.STRING,
allowNull: false
}
},
{
tableName: 'usuario',
timestamps: false
}
);
return Usuario;
};
Carregando os Modelos
const { Sequelize, DataTypes } = require('sequelize');
let _Checklist = require('./checklist');
let _Nota = require('./nota');
let _Usuario = require('./usuario');
const db = {};
//..
const sequelize = new Sequelize(options);
//..
const Checklist = _Checklist(sequelize, DataTypes);
const Nota = _Nota(sequelize, DataTypes);
const Usuario = _Usuario(sequelize, DataTypes);
db = { Checklist, Nota, Tag, Usuario };
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
Associações
[
{
"id": 1,
"titulo": "Teste",
"descricao": null,
"usuarioId": 1,
"usuario": {
"id": 1,
"nome": "Alan",
"email": "alansantos@grupointegrado.br"
}
}
]
Dado Associado
[
{
"id": 1,
"nome": "Alan",
"email": "alansantos@grupointegrado.br",
"notas": [
{
"id": 1
},
{
"id": 2
}
]
}
]
Dado Associado
HasMany
const Checklist = inicializarChecklist(sequelize, DataTypes);
const Nota = inicializarNota(sequelize, DataTypes);
Nota.hasMany(Checklist, { as: 'checklists', foreignKey: 'notaId' });
BelongsTo
const Usuario = _Usuario(sequelize, DataTypes);
const Nota = _Nota(sequelize, DataTypes);
Nota.belongsTo(Usuario, { as: 'usuario', foreignKey: 'usuarioId' });
await Usuario.create({
nome: "Alan",
email: "alansantos@grupointegrado.br"
});
let user = await Usuario.findOrCreate({
defaults: {
nome: "Alan",
email: "alansantos@grupointegrado.br"
},
where: {
email: "alansantos@grupointegrado.br"
}
});
console.log(user.isNewRecord);
Create
await Usuario.update({
nome: "Alan",
email: "alansantos@grupointegrado.br"
}, {
where: {
id
}
});
Update
await Usuario.destroy({
where: {
id
}
});
Destroy
await Usuario.findAll();
await Usuario.findAll({
where: {
id
}
});
await Usuario.findAll({
attributes: ['id', 'nome', 'email', 'avatar'],
where: {
id
}
});
Consultas
const { Nota, Checklist, conexao } = require('../bd');
const transaction = await sequelize.transaction();
try {
await Nota.create(nota, {
transaction
});
await Checklist.create(checklist, {
transaction
});
await transaction.commit();
} catch (error) {
await transaction.rollback();
//tratar status da requisição
}
Transações
Desafio
await Nota.findAll({
where: {
id
},
include: [
{
model: Usuario
}
]
});
Consultas Associativas
Ambientes diversificados
Ambientes diversificados
{
"username": "admin",
"password": "notes123",
"database": "notes",
"dialect": "mysql",
"host": "notes.cgssmrnlwpdu.us-east-2.rds.amazonaws.com",
}
Criando um arquivo JSON
const { Sequelize, DataTypes } = require('sequelize');
const database = require('../config/database.json');
// ...
const sequelize = new Sequelize(database);
Carregando as Configurações
Variáveis de Ambiente
{
"development": {
"username": "admin",
"password": "notes123",
"database": "notes",
"dialect": "mysql",
"host": "notes.cgssmrnlwpdu.us-east-2.rds.amazonaws.com",
},
"production": {
"username": "admin",
"password": "notes123",
"database": "notes",
"dialect": "mysql",
"host": "notes.cgssmrnlwpdu.us-east-2.rds.amazonaws.com",
}
}
Possibilidades
npm install --save-dev cross-env
// ou
yarn add -D cross-env
Pacote cross-env
{
"scripts": {
"serverprod": "cross-env NODE_ENV=production nodemon app.js",
"serverdev": "cross-env NODE_ENV=development nodemon app.js",
"start": "nodemon app.js"
}
}
Utilizando no package.json
const { Sequelize, DataTypes } = require('sequelize');
const database = require('../config/database.json');
const env = process.env.NODE_ENV || 'production';
// ...
const sequelize = new Sequelize(database[env]);
Carregando as Configurações