Comment Utiliser Sequelize avec Node.js et MySQL

03/06/2024

sequelize,nodejs,tuto

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);
  }
}



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);
  }
}




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);
  }
}


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.

Partager cet article: