Connecter une base de données à Node.js

3 min de lecture07 novembre 2026

Une application Node.js sans base de données reste rare : comptes, commandes, contenus. Sur l'hébergement d'applications, la base et ses accès dépendent de l'offre ; le code doit donc lire l'hôte, le port, le nom et les identifiants depuis les variables du panneau. Deux choix structurants : le pilote et la gestion du pool de connexions.

Choisir le pilote

Base Paquet recommandé Remarque
MySQL / MariaDB mysql2 Promesses natives, paquet mysql obsolète
PostgreSQL pg Pool intégré
Les deux via ORM Prisma, Sequelize, Knex Plus d'abstraction, migrations incluses

Un pilote suffit pour une petite API. Un ORM aide si vous avez plusieurs tables, des migrations et une équipe. Dans les deux cas, les requêtes doivent être paramétrées.

Configurer sans coder en dur

Bash
DATABASE_HOST=...
DATABASE_PORT=3306
DATABASE_NAME=...
DATABASE_USER=...
DATABASE_PASSWORD=...

ou une seule URL :

Bash
DATABASE_URL=mysql://utilisateur:mot-de-passe@hote:3306/base

L'hôte est celui indiqué par le panneau, pas localhost par réflexe : la base peut être sur une autre machine que le processus. Ces valeurs ne vont jamais dans le dépôt Git. Validez leur présence au démarrage et affichez l'hôte et le nom de la base dans le journal, jamais le mot de passe.

Pool et requêtes

Créer une connexion par requête épuise les ressources et ajoute de la latence. Utilisez un pool unique, créé au démarrage.

JavaScript
const mysql = require('mysql2/promise');

const pool = mysql.createPool({
  host: process.env.DATABASE_HOST,
  port: Number(process.env.DATABASE_PORT || 3306),
  user: process.env.DATABASE_USER,
  password: process.env.DATABASE_PASSWORD,
  database: process.env.DATABASE_NAME,
  waitForConnections: true,
  connectionLimit: 5,
  queueLimit: 0
});

const [rows] = await pool.query('SELECT id, name FROM items WHERE id = ?', [id]);

Avec PostgreSQL :

JavaScript
const { Pool } = require('pg');
const pool = new Pool({ connectionString: process.env.DATABASE_URL, max: 5 });
const { rows } = await pool.query('SELECT id, name FROM items WHERE id = $1', [id]);

Adaptez connectionLimit ou max à l'offre : un pool de 20 sur une base qui en autorise 10 provoque des erreurs d'épuisement. En cas d'erreur Too many connections, réduisez le pool avant d'augmenter l'offre. Fermez le pool sur SIGTERM avec await pool.end().

Migrations et sauvegardes

Une migration doit être versionnée, idempotente et exécutée une seule fois. Ne la lancez pas automatiquement à chaque démarrage si plusieurs instances peuvent démarrer en parallèle. Sauvegardez la base avant une migration destructive, puis testez la restauration.

L'utilisateur applicatif n'a pas besoin de DROP ni de droits d'administration. Accordez uniquement SELECT, INSERT, UPDATE, DELETE sur la base concernée. Les exports SQL ne doivent pas se retrouver dans un dossier public.

Vérifier

Exécutez SELECT 1, puis une requête réelle sur une table. Vérifiez que le journal indique la bonne base, que les erreurs de connexion sont explicites et que le pool se ferme au redémarrage. Si l'application démarre mais que la première requête échoue, le problème est souvent l'hôte ou les droits, pas le pilote.

Publicité

Cet article vous a-t-il aidé ?

À lire aussi