Intégration de MongoDB avec Koa

Pour utiliser MongoDB dans une application Koa, nous allons configurer une connexion à la base de données et créer une classe d'accès aux données. MongoDB Compass peut être utilisé comme outil de visualisation pour faciliter le développement.

Installation et configuration

Installez MongoDB localement ou via Docker, puis ajoutez le package npm mongodb à votre projet Koa :

npm install mongodb --save

Créez un fichier de configuration pour stocker les paramètres de connexion :

// config.js
const configuration = {
    uriConnexion: 'mongodb://localhost:27017/',
    nomBase: 'ma_base_koa'
};

module.exports = configuration;

Connexion à la base de données

Établissez une connexion avec MongoDB en utilisant l'URI et le nom de la base :

const { MongoClient } = require('mongodb');
const config = require('./config');

MongoClient.connect(config.uriConnexion, (erreur, client) => {
    if (erreur) {
        console.error('Échec de la connexion :', erreur);
        return;
    }
    const baseDonnees = client.db(config.nomBase);
    // Opérations sur la base ici
});

Opérations CRUD de base

Exemples d'insertion et de lecture de données :

// Insertion d'un document
baseDonnees.collection('utilisateurs').insertOne({
    nom: 'Alice',
    age: 30,
    role: 'développeur'
}, (err, resultat) => {
    if (!err) {
        console.log('Document inséré avec succès');
        client.close();
    }
});

// Requête de lecture
const curseur = baseDonnees.collection('utilisateurs').find({});
curseur.toArray((err, documents) => {
    console.log(documents);
});

Classe d'accès aux données encapsulée

Pour réutiliser la logique d'accès à la base, une classe singleton gère la connexion et les opérations :

// baseDeDonnees.js
const { MongoClient } = require('mongodb');
const config = require('./config');

class GestionnaireBDD {
    constructor() {
        this.client = null;
    }

    static obtenirInstance() {
        if (!GestionnaireBDD.instance) {
            GestionnaireBDD.instance = new GestionnaireBDD();
        }
        return GestionnaireBDD.instance;
    }

    connecter() {
        return new Promise((resolve, reject) => {
            if (this.client) {
                resolve(this.client);
                return;
            }
            MongoClient.connect(config.uriConnexion, (err, client) => {
                if (err) reject(err);
                else {
                    this.client = client.db(config.nomBase);
                    resolve(this.client);
                }
            });
        });
    }

    rechercher(nomCollection, critere) {
        return new Promise((resolve, reject) => {
            this.connecter().then(db => {
                db.collection(nomCollection).find(critere).toArray((err, docs) => {
                    err ? reject(err) : resolve(docs);
                });
            }).catch(reject);
        });
    }

    inserer(nomCollection, document) {
        return new Promise((resolve, reject) => {
            this.connecter().then(db => {
                db.collection(nomCollection).insertOne(document, (err, res) => {
                    err ? reject(err) : resolve(res);
                });
            }).catch(reject);
        });
    }

    mettreAJour(nomCollection, filtre, modifications) {
        return new Promise((resolve, reject) => {
            this.connecter().then(db => {
                db.collection(nomCollection).updateOne(filtre, { $set: modifications }, (err, res) => {
                    err ? reject(err) : resolve(res);
                });
            }).catch(reject);
        });
    }

    supprimer(nomCollection, filtre) {
        return new Promise((resolve, reject) => {
            this.connecter().then(db => {
                db.collection(nomCollection).deleteOne(filtre, (err, res) => {
                    err ? reject(err) : resolve(res);
                });
            }).catch(reject);
        });
    }
}

module.exports = GestionnaireBDD.obtenirInstance();

Étiquettes: Koa MongoDB Node.js JavaScript

Publié le 13 juin à 23h25