Model merupakan cetakan dari entitas yang akan kita gunakan dalam aplikasi kita. Untuk menentukan model apa saja yang perlu dibuat dalam aplikasi, kita harus merancang susunan database yang akan kita gunakan. Sebuah model akan merepresentasikan sebuah table pada database. Sekarang mari kita membuat model user dan role di aplikasi kita.
Masukkan kode berikut ke app/models/user.model.js
module.exports = (sequelize, Sequelize) => {
const User = sequelize.define("users", {
username: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
}
});
return User;
};
Dan masukkan kode berikut ke dalam app/models/role.model.js
module.exports = (sequelize, Sequelize) => {
const Role = sequelize.define("roles", {
id: {
type: Sequelize.INTEGER,
primaryKey: true
},
name: {
type: Sequelize.STRING
}
});
return Role;
};
Kemudian mari kita pindahkan kode yang sebelumnya berada di server js ke app/models/index.js sehingga isinya sebagai berikut
const config = require("../config/db.config.js");
const Sequelize = require("sequelize");
const sequelize = new Sequelize(
config.DB,
config.USER,
config.PASSWORD,
{
host: config.HOST,
dialect: config.dialect,
operatorsAliases: false,
}
);
const db = {};
db.Sequelize = Sequelize;
db.sequelize = sequelize;
db.user = require("../models/user.model.js")(sequelize, Sequelize);
db.role = require("../models/role.model.js")(sequelize, Sequelize);
db.role.belongsToMany(db.user, {
through: "user_roles",
foreignKey: "roleId",
otherKey: "userId"
});
db.user.belongsToMany(db.role, {
through: "user_roles",
foreignKey: "userId",
otherKey: "roleId"
});
db.ROLES = ["user", "admin", "moderator"];
module.exports = db;
disini kita membuat relasi many to many antara entitas user dan model, dimana seorang user bisa memiliki beberapa role, dan sebuah role bisa dimiliki oleh beberapa user.
Kode untuk koneksi pada server.js bis akita hapus karena sudah kita pindahkan ke app/models/index.js. Sekarang server.js berisi berikut
const express = require("express");
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
const db = require("./app/models");
const Role = db.role;
db.sequelize.sync({force: true}).then(() => {
console.log('Drop and Resync Db');
initial();
});
app.get("/", (req, res) => {
res.json({ message: "App is running" });
});
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}.`);
});
function initial() {
Role.create({
id: 1,
name: "user"
});
Role.create({
id: 2,
name: "moderator"
});
Role.create({
id: 3,
name: "admin"
});
}
Setelah merunning program sekali, ganti blok
db.sequelize.sync({force: true}).then(() => {
console.log('Drop and Resync Db');
initial();
});
menjadi
db.sequelize.sync();
untuk menghindari penghapusan data
Setelah ini kita akan mempelajari membuat controller dan route
Sumber: