Introduction : Pourquoi un développeur devrait-il connaître SQL et NoSQL ?
Le développement web moderne en JavaScript (Node.js) se passe rarement d'interactions avec les bases de données. Le choix entre les SGBD relationnels (PostgreSQL) et orientés documents (MongoDB) est l'une des décisions architecturales clés. Dans cet article, nous allons voir en pratique comment se connecter aux deux bases de données, effectuer des opérations CRUD et choisir l'outil adapté à une tâche spécifique.
Nous utiliserons les bibliothèques populaires : pg pour PostgreSQL et mongoose pour MongoDB. Tous les exemples de code sont en Node.js.
1. PostgreSQL dans Node.js : l'approche relationnelle
1.1. Connexion et configuration
PostgreSQL est un SGBD relationnel puissant avec prise en charge de SQL. Pour l'utiliser dans Node.js, installez le paquet pg :
npm install pgExemple de connexion à la base de données locale mydb :
const { Pool } = require('pg');
const pool = new Pool({ user: 'postgres', host: 'localhost', database: 'mydb', password: 'secret', port: 5432,});
// Test de la connexionpool.query('SELECT NOW()', (err, res) => { if (err) { console.error('Erreur de connexion :', err); } else { console.log('Connecté à PostgreSQL :', res.rows[0].now); }});1.2. Opérations CRUD (création, lecture, mise à jour, suppression)
Créons la table users et effectuons les opérations de base.
Création de la table :
const createTable = async () => { const query = ` CREATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, age INTEGER ); `; await pool.query(query); console.log('Table users créée');};
createTable();Insertion de données (INSERT) :
const addUser = async (name, email, age) => { const query = 'INSERT INTO users (name, email, age) VALUES ($1, $2, $3) RETURNING *'; const values = [name, email, age]; const res = await pool.query(query, values); console.log('Utilisateur ajouté :', res.rows[0]);};
addUser('Ivan Petrov', 'ivan@example.com', 30);Lecture de données (SELECT) :
const getUsers = async () => { const res = await pool.query('SELECT * FROM users'); console.log('Tous les utilisateurs :', res.rows);};
getUsers();Mise à jour de données (UPDATE) :
const updateUserAge = async (id, newAge) => { const query = 'UPDATE users SET age = $1 WHERE id = $2 RETURNING *'; const values = [newAge, id]; const res = await pool.query(query, values); console.log('Utilisateur mis à jour :', res.rows[0]);};
updateUserAge(1, 31);Suppression de données (DELETE) :
const deleteUser = async (id) => { const query = 'DELETE FROM users WHERE id = $1 RETURNING *'; const values = [id]; const res = await pool.query(query, values); console.log('Utilisateur supprimé :', res.rows[0]);};
deleteUser(1);Notez l'utilisation de requêtes paramétrées ($1, $2). Cela protège contre les injections SQL.
1.3. Quand choisir PostgreSQL ?
- Une structure de données stricte et la prise en charge de l'intégrité (clés étrangères, transactions) sont requises.
- Des requêtes JOIN complexes et des agrégations sont nécessaires.
- Travail avec des données financières ou critiques.
- Le projet utilise un ORM comme Sequelize ou TypeORM.
2. MongoDB dans Node.js : la flexibilité du NoSQL
2.1. Connexion via Mongoose
MongoDB est une base de données orientée documents, où les données sont stockées au format JSON-like (BSON). Pour l'utiliser, installez mongoose :
npm install mongooseConnexion au serveur local Mo