Bases de données
Introduction
Node sait se connecter à une quantité importante de moteurs de bases de données, grâce à sa communauté active qui développe les paquets npm adéquats. L’intérêt premier est bien sûr de pouvoir utiliser Node avec une infrastructure existante : la transition vers Node se fait alors en douceur.
Parmi les moteurs en question, citons le très populaire MongoDB, un moteur de base de données de type NoSQL qui est souvent utilisé en tandem avec Node. Redis, CouchDB et Riak sont également souvent employés.
Le débat « SQL contre NoSQL » n’en est pas vraiment un. Cela serait plutôt « bases de données relationnelles contre bases de données non relationnelles ». Quel type est le plus adapté à Node ? Il n’y a pas de réponse à cette question car il n’y a pas de solution miracle répondant à tous les besoins. En effet, choisir un moteur de base de données dépend de nombreux facteurs : types de données à stocker, taille de la base, besoins de réplication ou non, souplesse nécessaire, etc. Ce chapitre va donc servir d’introduction, afin que vous puissiez comprendre le principe général de Node et sa façon de se connecter à des bases de données. Bien entendu, chaque...
SQL
Il existe de très nombreux moteurs de bases de données SQL. Plutôt que d’énumérer une longue liste de modules pour faire des requêtes dans Node, rendez-vous sur http://npmjs.org et faites une recherche avec le nom de votre moteur de base de données.
Par exemple, si vous cherchez à vous connecter à un moteur Microsoft SQL Server, cherchez le terme « mssql ». À l’heure où nous écrivons ces lignes, le paquet qui se démarque très nettement des autres se nomme tout simplement... mssql !
Nous allons tout de même explorer le paquet pg pour illustrer sa simplicité d’utilisation, qui est au final semblable à celle des autres paquets se connectant à des bases de données SQL.
1. PostgreSQL
PostgreSQL est un moteur de base de données relationnelle performant, très utilisé et doté de fonctionnalités avancées (réplication, cluster...).
Il existe le paquet pg pour Node, et grâce à lui, rien de plus simple que d’exploiter ce moteur :
$ npm install pg
La documentation est disponible à cet endroit : http://npmjs.org/package/pg.
Et voici un exemple concis et simple à comprendre :
var pg = require('pg');
var conString = 'postgres://myuser:mypassword@myhost/mydatabase';
var client...
NoSQL
Le mouvement NoSQL a été popularisé début 2009 aux États-Unis. Les principales caractéristiques des bases de données NoSQL sont :
-
pas de schéma ;
-
réplication aisée ;
-
API simples ;
-
capacité à gérer de grandes quantités de données.
On distingue les bases de données NoSQL de type "colonne", "document", "clé-valeur" ou encore "graphe" en fonction du modèle de données. Cela n’étant pas le sujet de l’ouvrage, nous n’entrerons pas dans les détails ici, mais le Web regorge de ressources à ce sujet : n’hésitez pas à creuser avec votre moteur de recherche préféré.
1. MongoDB
MongoDB est une base NoSQL de type « document » et aussi la plus populaire du moment. De plus, c’est le partenaire idéal de Node : en effet, l’éditeur a rapidement développé des pilotes très performants et simples pour cette plate-forme. À ce propos, vous pourriez entendre parler de la MEAN stack (MEAN pour MongoDB Express Angular Node), qui est une pile complète pour fabriquer des applications web, ce qu’est LAMP pour PHP.
Avant toute chose, il faut comprendre le principe d’une base de données de type « document ». Voici un exemple simple : une carte de visite. Elle contient habituellement le nom de l’entreprise, le nom et le prénom de la personne et son adresse électronique. Cette carte peut être représentée comme ceci :
{
"_id": 123,
"type": "carte_visite",
"entreprise": "Foobar SAS",
"nom": "Solo",
"nom": "Han",
"courriel": "han.solo@foobar.com"
}
C’est avec ce genre de données que MongoDB est fait pour travailler.
Pour l’installer, comme d’habitude, on passe par npm et le paquet suivant :
$ npm install mongodb
Maintenant, sachez qu’il existe une façon plus efficace encore pour travailler avec MongoDB et cette solution s’appelle Mongoose....