Knex.js pour JavaScript (Node.js) : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Knex.js pour JavaScript (Node.js) : guide complet avec exemples

1. Qu'est-ce que Knex.js et pourquoi l'utiliser ?

Knex.js est un constructeur de requêtes SQL (SQL query builder) puissant, flexible et performant pour Node.js. Contrairement aux bibliothèques ORM (Object-Relational Mapping) comme Sequelize ou TypeORM, Knex.js ne cherche pas à vous abstraire complètement du SQL. Il vous offre plutôt une API pratique et chaînable (chainable) pour construire des requêtes SQL de manière programmatique, tout en vous laissant un contrôle total sur le SQL final. Cela fait de Knex.js le choix idéal pour les projets où la performance, la transparence des requêtes et la flexibilité sont essentielles, tout en évitant d'écrire du SQL brut avec des risques d'erreurs de syntaxe et d'injections SQL.

L'objectif principal de Knex.js est de simplifier l'interaction avec les bases de données relationnelles (PostgreSQL, MySQL, SQLite3, MSSQL, Oracle) depuis JavaScript. Il prend en charge des tâches courantes comme l'échappement des identifiants et des valeurs (protection contre les injections SQL), la gestion du pool de connexions, les migrations de schéma (création, modification de tables) et l'ensemencement (seeding) de données de test. Knex.js prend également en charge les transactions, les sous-requêtes, les fonctions de fenêtrage (window functions), les requêtes brutes (raw queries) et bien plus encore, ce qui en fait un outil polyvalent aussi bien pour les petits projets que pour les systèmes à forte charge.

Pour le site éducatif PythonLib, qui met l'accent sur l'apprentissage pratique, Knex.js présente un intérêt particulier. Il permet aux étudiants, déjà familiers avec les bases du SQL, de passer rapidement à l'écriture de code Node.js sécurisé et efficace. Apprendre Knex.js est un excellent pont entre la théorie SQL et le développement backend réel. Vous n'apprenez pas simplement la magie d'un ORM, mais vous comprenez comment chaque méthode se traduit en une requête SQL spécifique, ce qui est crucial pour le débogage et l'optimisation.

2. Installation

L'installation de Knex.js se fait via le gestionnaire de paquets npm. Vous devrez également installer le pilote (driver) pour votre base de données.

# Installation de Knex.js
npm install knex --save

# Installation du pilote pour PostgreSQL
npm install pg --save

# Installation du pilote pour MySQL / MariaDB
npm install mysql2 --save

# Installation du pilote pour SQLite3
npm install sqlite3 --save

# Installation du pilote pour MSSQL
npm install tedious --save

# Installation du pilote pour Oracle
npm install oracledb --save

Important : Le pilote de base de données s'installe séparément. Knex.js l'utilise pour interagir directement avec la base de données. Après l'installation, vous pouvez installer globalement l'interface en ligne de commande (CLI) de Knex pour gérer les migrations et les seeds : npm install knex -g.

3. Démarrage rapide — un exemple minimal fonctionnel

Créez un fichier app.js et connectez-vous à une base de données SQLite (ne nécessite pas d'installation de serveur).

// Import de Knex
const knex = require('knex');

// Configuration de la connexion à SQLite
const db = knex({
    client: 'sqlite3', // Type de base de données
    connection: {
        filename: './mydb.sqlite' // Chemin vers le fichier de la base de données
    },
    useNullAsDefault: true // Recommandé pour SQLite
});

// Fonction asynchrone pour la démonstration
async function main() {
    // 1. Création de la table 'users' si elle n'existe pas
    await db.schema.createTableIfNotExists('users', (table) => {
        table.increments('id'); // Clé primaire auto-incrémentée
        table.string('name');   // Champ texte
        table.integer('age');   // Champ entier
    });

    // 2. Insertion de données
    await db('users').insert({ name: 'Alice', age: 30 });
    await db('users').insert({ name: 'Bob', age: 25 });

    // 3. Sélection de tous les enregistrements
    const users = await db.select('*').from('users');
    console.log('Tous les utilisateurs :', users);

    // 4. Sélection avec condition
    const youngUsers = await db('users').where('age', '<', 28)                    

Recommendations