Jusqu'à présent, nous n'avons pas pu faire persister de données ou rendre notre application entièrement dynamique. Mais tout cela est sur le point de changer, car nous intégrons la couche de base de données de notre serveur : MongoDB.
Mais pourquoi MongoDB ? Vous avez peut-être entendu dire qu'il s'agit d'une base de données NoSQL, mais qu'est-ce que ça veut dire ? Déjà, qu'est-ce qu'une base de données SQL ? D'ailleurs, qu'est-ce qu'une base de données tout court ?!
Qu'est-ce qu'une base de données ?
Une base de données, en gros, est une collection de données structurées. La structure des données, ainsi que l'organisation de la collection dépendent du type de base de données. Il y a deux types de base qui nous intéresseront ici : SQL et NoSQL.
Qu'est-ce qu'une base de données SQL ?
Une base de données SQL (prononcé "ci-couel", ou "sequel" en anglais) est une base de données relationnelle qui emploie le langage Structured Query Language pour gérer les données qu'elle contient. Généralement, une base de données SQL organise ses données dans des tables selon des schémas stricts. Par exemple, si on décide qu'un utilisateur a un prénom, un nom et une adresse mail, on aura une table Users avec des colonnes first_name
, last_name
et email
, et chaque rangée correspondra à un utilisateur. Pour être un utilisateur valide, chaque utilisateur doit avoir un prénom, un nom et une adresse mail, donc on peut être certain que chaque utilisateur tiré de la base de données aura ces attributs.
Dans une base de données SQL, les relations entre les différentes tables sont très importantes. Pour cette raison, notre table Users aura également une colonne id
pour l'identifiant individuel unique de chaque utilisateur. Cela signifie que l'on peut faire référence à un utilisateur depuis une autre table. Par exemple, on pourrait avoir une table Orders pour les commandes des utilisateurs. Chaque commande doit appartenir à un utilisateur, donc on fera référence à l'identifiant de l'utilisateur dans la colonne user_id
de la table Orders.
Les bases de données SQL (comme MySQL ou PostgreSQL) sont très bien adaptées aux données relationnelles et pour des données où des définitions fortes sont nécessaires. Cependant, dans le contexte de projets plus petits, des MVP ou des startups, on ne sait peut-être pas encore à quoi ressemblera notre dernier modèle de données. On souhaitera aussi potentiellement pouvoir grandir rapidement (il est très difficile d'agrandir une base de données SQL au-delà d'une certaine limite) pour pouvoir gérer un plus grand nombre d'utilisateurs. Voilà où le NoSQL montre son utilité, en particulier MongoDB.
Qu'est-ce que MongoDB ?
MongoDB est une base de données NoSQL. Cela signifie que l'on ne peut pas utiliser SQL pour communiquer avec. Les données sont stockées comme des collections de documents individuels décrits en JSON (JavaScript Object Notation). Il n'y a pas de schéma strict de données (on peut écrire, en gros, ce que l'on veut où l'on veut), et il n'y a pas de relation concrète entre les différentes données. Cependant, il existe des outils (que vous découvrirez rapidement !) pour nous aider à subvenir à ces besoins.
Les avantages principaux de MongoDB sont son évolutivité et sa flexibilité. Le site officiel décrit MongoDB comme étant "construit pour des personnes qui construisent des applications Internet et des applications métier qui ont besoin d'évoluer rapidement et de grandir élégamment". La compétence MongoDB est donc très recherchée dans les startups et PME. Un autre avantage est la facilité avec laquelle on communique avec la base de données avec JavaScript, avec les documents décrits en JSON. Cela vous permet d'appliquer les connaissances JS que vous avez déjà à la couche base de données !
Bon, ça suffit côté théorique – passons à la pratique !
Configurez MongoDB Atlas
Bien qu'il soit possible de télécharger et d'exécuter MongoDB sur votre propre machine (reportez-vous au site web de MongoDB pour en savoir plus), pour ce cours nous utiliserons la couche gratuite de MongoDB Atlas, la « database as a service » (base de données en tant que service).
Accédez au site web de MongoDB et inscrivez-vous pour obtenir un compte gratuit. Une fois que vous avez accès à votre tableau de bord, créez un cluster puis configurez-le avec l'option AWS et uniquement les options gratuites afin de pouvoir développer gratuitement.
Pendant le démarrage de votre cluster, vous pouvez accéder à l'onglet Database Access. D'abord, vous devrez ajouter un utilisateur disposant de la capacité de lecture et d'écriture dans n'importe quelle base de données. Choisissez le nom d'utilisateur ainsi que le mot de passe de votre choix et notez-les, car vous en aurez besoin pour connecter votre API à votre cluster.
Vous devrez également accéder à l'onglet Network Access, cliquer sur Add IP Adress et autoriser l'accès depuis n'importe où (Add access from Anywhere).
Une fois la création de votre cluster terminée, vous pouvez passer à la section suivante.
Connectez votre API à votre cluster MongoDB
Depuis MongoDB Atlas, cliquez sur le bouton Connect et choisissez Connect your application. Sélectionnez bien la version la plus récente du driver Node.js, puis Connection String Only, et faites une copie de la chaîne de caractères retournée.
De retour sur votre projet, installez le package Mongoose en exécutant, à partir du dossier backend
, la commande suivante :
npm install mongoose
Une fois l'installation terminée, importez mongoose
dans votre fichier app.js
en ajoutant la constante suivante :
const mongoose = require('mongoose');
Juste en dessous de votre déclaration de constante app
, ajoutez la ligne suivante. Veillez à remplacer l'adresse SRV par la vôtre, et la chaîne <PASSWORD>
par votre mot de passe utilisateur MongoDB :
mongoose.connect('mongodb+srv://jimbob:<PASSWORD>@cluster0-pme76.mongodb.net/test?retryWrites=true&w=majority',
{ useNewUrlParser: true,
useUnifiedTopology: true })
.then(() => console.log('Connexion à MongoDB réussie !'))
.catch(() => console.log('Connexion à MongoDB échouée !'));
Après enregistrement, voire redémarrage de votre serveur Node si nécessaire, vous devriez voir le message « Connexion à MongoDB Atlas réussie ! » dans la console. Votre API est à présent connectée à votre base de données, et nous pouvons commencer à créer des routes serveur afin d'en bénéficier.
En résumé
Pour des applications qui ont besoin d'évoluer rapidement, les bases de données NoSQL comme MongoDB sont souvent un bon choix de technologie.
MongoDB Atlas permet d'héberger gratuitement une base de données MongoDB.
Le package Mongoose facilite les interactions entre votre application Express et votre base de données MongoDB.
Maintenant que vous avez configuré votre base de données, voyons ensemble comment créer un schéma de données pour rendre notre application robuste, dans le chapitre suivant !