Introduction
Salut ! Aujourd'hui, je vais te montrer comment utiliser Sequelize, un ORM (Object-Relational Mapping) puissant, avec Node.js et MySQL. Nous allons voir comment configurer ton projet, créer des modèles, et utiliser des méthodes courantes ainsi que les associations entre les modèles.
Prérequis
Assure-toi d'avoir Node.js et npm installés. Tu dois également avoir un serveur MySQL en cours d'exécution et accessible.
1. Initialiser le Projet
Crée un nouveau répertoire pour ton projet et navigue dedans depuis ton terminal :
mkdir mon-projet-sequelize
cd mon-projet-sequelize
Initialise un nouveau projet Node.js :
npm init -y
2. Installer Sequelize, Sequelize CLI et MySQL2
Installe Sequelize, Sequelize CLI, et le pilote MySQL2 comme dépendances :
npm install sequelize sequelize-cli mysql2
3. Initialiser Sequelize
Utilise Sequelize CLI pour initialiser Sequelize dans ton projet :
npx sequelize-cli init
Cette commande crée une structure de répertoires pour ton projet Sequelize :
mon-projet-sequelize
--- config
| --- config.json
--- migrations
--- models
| --- index.js
--- seeders
|
4. Configurer la Base de Données
Ouvre le fichier config/config.json
et configure les informations de ta base de données MySQL :
{
"development": {
"username": "ton_username",
"password": "ton_mot_de_passe",
"database": "nom_de_ta_base_de_donnees",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "ton_username",
"password": "ton_mot_de_passe",
"database": "nom_de_ta_base_de_donnees_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "ton_username",
"password": "ton_mot_de_passe",
"database": "nom_de_ta_base_de_donnees_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
5. Créer le Fichier de Connexion à la Base de Données
Dans le fichier index.js
, configure la connexion à la base de données et démarre le serveur Express :
require('dotenv').config();
const express = require("express");
const cookieParser = require("cookie-parser");
const cors = require("cors");
const app = express();
const db = require("./models");
const router = require("./src/routes/route");
app.use(
cors({
origin: "http://localhost:3000",
credentials: true,
})
);
app.use(express.json());
app.use(cookieParser());
const port = 3001;
db.sequelize
.sync({ alter: true })
.then(() => {
console.log("Base de données synchronisée");
})
.catch((err) => console.log(err));
app.use(router);
app.listen(port, () => {
console.log("En écoute sur le port : " + port);
});
6. Créer et Configurer les Modèles
creer un fichier, exemple models/User.js
pour définir le modèle User
et ses associations :
// Définir le modèle User
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define("User", {
// Définir les attributs de l'utilisateur
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true,
},
name: {
type: DataTypes.STRING,
},
email: {
type: DataTypes.STRING,
},
password: {
type: DataTypes.STRING,
},
isValidate: {
type: DataTypes.BOOLEAN,
},
confirmCode: {
type: DataTypes.STRING,
},
});
// Définir les associations
User.associate = (models) => {
// Un utilisateur peut avoir plusieurs sessions
User.hasMany(models.UserSessions, { as: "sessions", foreignKey: "userId" });
// Un utilisateur peut avoir plusieurs posts
User.hasMany(models.Post, { as: "posts", foreignKey: "userId" });
// Un utilisateur peut suivre plusieurs utilisateurs et être suivi par plusieurs utilisateurs
User.hasMany(models.UserFollow, { as: "followings", foreignKey: "userId" });
User.hasMany(models.UserFollow, { as: "followers", foreignKey: "friendId" });
};
return User;
};
7. Créer les Fonctions CRUD
Voici quelques exemples de fonctions avec des noms clairs pour effectuer les opérations CRUD :
const { User } = require('./models');
async function createUser(data) {
try {
const newUser = await User.create(data);
console.log('Utilisateur créé :', newUser.toJSON());
} catch (error) {
console.error('Erreur lors de la création de l\'utilisateur :', error);
}
}
const { User } = require('./models');
async function findUserByEmail(email) {
try {
const user = await User.findOne({ where: { email } });
if (user) {
console.log('Utilisateur trouvé :', user.toJSON());
} else {
console.log('Utilisateur non trouvé');
}
} catch (error) {
console.error('Erreur lors de la recherche de l\'utilisateur :', error);
}
}
- Trouver tous les utilisateurs :
const { User } = require('./models');
async function findAllUsers() {
try {
const users = await User.findAll();
console.log('Tous les utilisateurs :', JSON.stringify(users, null, 2));
} catch (error) {
console.error('Erreur lors de la recherche de tous les utilisateurs :', error);
}
}
- Mettre à jour un utilisateur :
const { User } = require('./models');
async function updateUser(email, newData) {
try {
const user = await User.findOne({ where: { email } });
if (user) {
Object.assign(user, newData);
await user.save();
console.log('Utilisateur mis à jour :', user.toJSON());
} else {
console.log('Utilisateur non trouvé');
}
} catch (error) {
console.error('Erreur lors de la mise à jour de l\'utilisateur :', error);
}
}
- Supprimer un utilisateur :
const { User } = require('./models');
async function deleteUser(email) {
try {
const user = await User.findOne({ where: { email } });
if (user) {
await user.destroy();
console.log('Utilisateur supprimé');
} else {
console.log('Utilisateur non trouvé');
}
} catch (error) {
console.error('Erreur lors de la suppression de l\'utilisateur :', error);
}
}
Et voilà, tu as maintenant un projet Node.js avec Sequelize et MySQL pleinement fonctionnel ! Nous avons vu comment configurer Sequelize, créer des modèles, utiliser des méthodes CRUD, et gérer les associations entre les modèles. Amuse-toi bien à explorer les nombreuses fonctionnalités de Sequelize, comme les validations, les hooks, et bien plus encore.