ORM & Generare model utilizator
Sequelize + SQLite
Last updated
Sequelize + SQLite
În cadrul folderului server, creăm un subfolder numit database, care va gestiona întreaga configurare a modelelor pentru baza de date.
Folderul database va conține, la rândul său, fișierul server.js și un subfolder models.
În folderul models vor fi stocate toate modelele SQLite pe care dorim să le includem în baza de date.
Structura dorită a fișierelor:
server/ │ ├── database/ │ ├── models/ │ │ ├── User.js │ │ └── index.js │ ├── .env ├── .gitignore ├── package.json ├── package-lock.json ├── server.js └── index.js

În cadrul fișierului server.js importăm librăria Sequelize, inclusiv cu tot folderul de modele, după care creăm o instanță Sequelize pentru baza de date, specificând:
dialect: "sqlite" – tipul bazei de date.
storage: "database/db.sqlite" – folderul și numele fișierului unde se stochează baza de date.
logging: false – dezactivarea logării interogărilor SQL în consolă.
Ulterior, sincronizăm modelele cu baza de date folosind sequelize.sync(), ceea ce creează tabelele în baza de date dacă nu există.
După ce am generat modelul de utilizator, în cadrul folderului models generăm un nou fișier index.js care se va ocupa de generarea viitoarelor relații dintre tabele.
// server/database/models/index.js
const User = require('./User');
// Associations
module.exports = { User };Ne mutăm în fișierul index.js și importăm modelul de User, pe baza căruia se va genera automat baza de date în momentul în care pornește serverul.
Dacă repornim serverul, ar trebui ca baza de date cu numele "db.sqlite" să fie generată în folderul database, iar în consolă să primim mesajul "Model successfully (re)created".
Last updated
// server/database/models/User.js
const { sequelize } = require('../server');
const { DataTypes } = require('sequelize');
const User = sequelize.define('User', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
name: {
type: DataTypes.STRING,
allowNull: false,
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
role: {
type: DataTypes.ENUM('user', 'admin'),
allowNull: false,
defaultValue: 'user',
},
}, {
tableName: 'users',
timestamps: true,
createdAt: 'created_at',
updatedAt: 'updated_at',
});
module.exports = User;
// server/database/server.js
const { Sequelize } = require("sequelize");
const models = require("./models");
const sequelize = new Sequelize({
dialect: "sqlite",
storage: "database/db.sqlite",
logging: false,
});
sequelize
.sync()
.then(() => {
console.log("Models successfully (re)created.");
})
.catch((err) => {
console.log(err);
});
module.exports = { sequelize, models };const express = require('express');
const cors = require('cors');
const { User } = require('./database/models'); //new line
const dotenv = require('dotenv');
const morgan = require('morgan');
const app = express();
dotenv.config();
const PORT = process.env.PORT || 3000;
app.use(morgan('dev'))
app.use(cors());
app.use(express.json());
app.get('/', (req, res) => {
res.status(200).json({ message: 'Hello' })
})
app.listen(PORT, () => {
console.log(`Server successfully started on port ${PORT}`)