Categories: Articles tech

Node.js et MySQL : comment utiliser MySQL sur une application Node ?

MySQL est l’un des systèmes de gestion de bases de données les plus utilisés dans le web. Dans cet article, découvre comment utiliser MySQL avec un serveur NodeJS

MySQL est l’un des systèmes de gestion de bases de données les plus utilisés dans le monde. À l’inverse des solutions NoSQL telles que MongoDB, MySQL permet de gérer des bases de données relationnelles en se basant sur le langage SQL (Structured Query Language).

Les informations contenues dans une table de base de données relationnelle peuvent en effet être liées avec celles d’une autre table via les clés : chaque ligne d’une table peut être identifiée de manière unique via sa clé primaire, et peut référer à la ligne d’une autre table via une clé étrangère. Ces relations permettent entre autres de réaliser des jointures pour permettre à une même requête d’accéder à des informations situées dans différentes tables de la base de données MySQL.

🧑‍🎓 Vous souhaitez tester vos connaissances sur NodeJS 📖 ?
WeLoveDevs.com met a disposition gratuitement un test technique avec son corrigé sur NodeJS

Prenons par exemple ces deux tables “élèves” et “cours” :

Prenons par exemple deux tables SQL, la première contenant les élèves, l’autre contenant les cours

Une jointure simple (“JOIN” en SQL) permet ainsi de ressortir chaque élève et le cours auquel il doit assister :

SELECT eleves.id as 'eleve_id', eleves.nom as 'eleve_nom', eleves.cours_id, cours.nom as 'cours_nom', cours.date as 'cours_date'FROM elevesJOIN cours on eleves.cours_id = cours.id
Résultat de la requête JOIN en SQL

Au-delà de cette capacité à gérer des relations complexes, MySQL propose une performance optimale, des fonctionnalités de sécurité avancées et tous les avantages de l’open source. Ces caractéristiques font de MySQL une solution solide et un choix sûr pour les applications Node.js ayant besoin de bases de données relationnelles.

Ce guide MySQL NodeJS vous apprend comment utiliser MySQL dans votre application Node.js. Veillez à avoir installé NodeJS et MySQL sur votre machine ainsi qu’à disposer d’un projet Node prêt à l’utilisation. N’hésitez pas à vous référer à nos autres guides Node.js

Connecter une base de données MySQL à une app Node.js

Plusieurs librairies NodeJS permettent d’établir une connexion avec une base de données MySQL et d’exécuter des requêtes. Parmi elles, les deux plus populaires sont :

  • mysql, un driver MySQL basique pour Node.js écrit en javascript et ne nécessitant pas de compilation. Il s’agit de la solution la plus simple et rapide à mettre en place pour interagir avec une base de données MySQL en Node.
  • Sequelize, la librairie la plus populaire pour utiliser les systèmes de gestion de bases de données basés sur SQL avec Node.js. Elle supporte MySQL mais également Postgres, Microsoft SQL, MariaDB… Cet ORM (Object-Relational Mapping) puissant permet entre autres l’utilisation de promesses et la customisation des messages d’erreur pour chaque champ.
  • Prisma est un autre ORM populaire dans l’écosystème JavaScript

Utiliser le module mysql pour utiliser une base de données MySql en Node

Commencez par installer le module mysql dans le dossier de votre projet Node.js avec npm installe :

npm install mysql

Dans le fichier point d’entrée de votre projet Node.js, initialisez le module dans une variable avec require() :

const mysql = require('mysql');

Votre app NodeJS peut maintenant se connecter à votre base de données MySQL.

Se connecter à la base MySQL avec le module mysql

Pour vous connecter à votre base MySQL, renseignez l’hôte, l’utilisateur et le mot de passe spécifié lors de l’installation de MySQL sur votre système :

const db = mysql.createConnection({   host: "localhost",   user: "nom_utilisateur",   password: "mot_de_passe_utilisateur" });

Enfin, utilisez la fonction connect pour vous connecter à votre base de données MySQL. Une exception sera jetée en cas d’erreur :

 db.connect(function(err) {   if (err) throw err;   console.log("Connecté à la base de données MySQL!"); });

Votre utilisateur est désormais connecté à la base de données MySQL et peut y exécuter des requêtes.

Créer une base de données MySQL en Node.js avec le module missel

Pour créer une base de données MySQL, exécutez simplement une requête CREATE DATABASE avec la fonction query() dans le code de votre app :

const mysql = require('mysql');const db = mysql.createConnection({   host: "localhost",   user: "nom_utilisateur",   password: "mot_de_passe_utilisateur" }); db.connect(function(err) {   if (err) throw err;   console.log("Connecté à la base de données MySQL!");  db.query("CREATE DATABASE mabdd", function (err, result) {       if (err) throw err;       console.log("Base de données créée !");     }); });

Exécuter des requêtes SQL sur une base MySQL avec NodeJS

Vous pouvez ainsi exécuter tout type de requête SQL, comme par exemple la jointure que nous avons effectué en introduction de ce guide :

const mysql = require('mysql');const con = mysql.createConnection({   host: "localhost",   user: "nom_utilisateur",   password: "mot_de_passe_utilisateur"   database : "mabdd" });  con.connect(function(err) {   if (err) throw err;   console.log("Connecté à la base de données MySQL!");   con.query("SELECT eleves.id as 'eleve_id', eleves.nom as 'eleve_nom', eleves.cours_id, cours.nom as 'cours_nom', cours.date as 'cours_date' FROM eleves JOIN cours on eleves.cours_id = cours.id", function (err, result) {       if (err) throw err;       console.log(result);     }); });

Notez que nous avons cette fois précisé le nom de la base de données MySQL sur laquelle se connecter dans l’appel à la fonction createConnection(). On retrouve bien entendu les mêmes résultats qu’en introduction :

Voici la réponse fournie par le package mysql invoqué depuis notre fichier Javascript

Utiliser une base de données MySQL en NodeJS avec Sequelize

Pour utiliser Sequelize afin d’interagir avec votre base de données MySQL en Node, il vous faut d’abord installer le driver mysql2. Il s’agit d’un driver distinct du module mysql, moins populaire que ce dernier, mais qui propose quelques fonctionnalités supplémentaires.

Installez mysql2 avec npm install :

npm install mysql2

Dans le code de votre app, initialisez Sequelize avec require() :

const { Sequelize } = require('sequelize');

Dans un nouvel objet Sequelize, indiquez le nom d’utilisateur, le nom d’utilisateur, le mot de passe et le nom de la base de données MySQL afin d’établir la connexion :

const sequelize = new Sequelize("nom_base_de_donnees", "nom_utilisateur", "mot_de_passe_utilisateur", {    dialect: "mysql",    host: "localhost"});

Enfin, vous pouvez vérifier que la connexion est bien établie avec authenticate(), mais cette partie n’est pas nécessaire pour exécuter des requêtes sur votre base :

try {   sequelize.authenticate();   console.log('Connecté à la base de données MySQL!'); } catch (error) {   console.error('Impossible de se connecter, erreur suivante :', error); }

Créer une base de données MySQL en Node.js avec Sequelize

Pour créer une base de données MySQL en Node avec Sequelize, ajoutez simplement une requête CREATE DATABASE dans un appel à la fonction query() à votre code :

const sequelize = new Sequelize("", "nom_utilisateur", "mot_de_passe_utilisateur", { dialect: "mysql", host: "localhost"});try {   sequelize.authenticate();   console.log('Connecté à la base de données MySQL!');   sequelize.query("CREATE DATABASE `mabdd`;").then(([results, metadata]) => {       console.log('Base de données créée !');     }) } catch (error) {   console.error('Impossible de se connecter, erreur suivante :', error); }

Exécuter des requêtes SQL sur une base MySQL avec Sequelize

Avec la fonction query(), vous pouvez exécuter n’importe quelle requête SQL sur votre base de données, comme par exemple la jointure que nous avons utilisée en introduction de ce guide :

const sequelize = new Sequelize("mabdd", "nom_utilisateur", "mot_de_passe_utilisateur", { dialect: "mysql", host: "localhost"});try {   sequelize.authenticate();   console.log('Connecté à la base de données MySQL!');   sequelize.query("SELECT eleves.id as 'eleve_id', eleves.nom as 'eleve_nom', eleves.cours_id, cours.nom as 'cours_nom', cours.date as 'cours_date' FROM eleves JOIN cours on eleves.cours_id = cours.id").then(([results, metadata]) => {       console.log(results);     }) } catch (error) {   console.error('Impossible de se connecter, erreur suivante :', error); }

On retrouve le même résultat dans la console :

Réponse SQL via le package Seequelize
Lucas Roquilly

Recent Posts

MICI au travail : Le handicap invisible qui révèle des forces insoupçonnées

Les maladies inflammatoires chroniques de l’intestin ou "MICI" sont invisibles, mais leurs impacts sur la…

2 jours ago

Exploiter les NPUs pour de l’IA embarquée dans les applis webs

Depuis l'été, j'ai un Pixel qui intègre à la fois un TPU (Tensor Processing Unit)…

6 jours ago

Qcm saison hiver 2024 : toutes les infos.

On se retrouve dans un nouvel article avec toutes les infos sur cette nouvelle saison…

3 semaines ago

L’inclusion numérique est essentielle.

Pourquoi l’inclusion numérique est essentielle : le point avec Mathieu Froidure. Dans un monde de…

4 semaines ago

Communauté Tech et féminine : Interview avec Helvira de Motiv’her

Elles sont passées où les femmes dans la tech ? Entre le manque de représentation…

1 mois ago