Nouveau : Datasets open source gratuits disponibles !Decouvrir →
🟢
Intermediaire 30 min Express

Express avec MongoDB : guide pratique

Pourquoi Express avec MongoDB : guide pratique ?

Au quotidien, un développeur peut être confronté à divers besoins qui nécessitent une combinaison de technologies robustes et performantes. L'utilisation d'Express.js et MongoDB est une solution idéale pour créer des applications backend efficaces et scalables.

Le contexte réel implique que de nombreuses entreprises utilisent Express.js comme framework pour construire des API RESTful, tandis qu'ils stockent les données dans MongoDB, un système de base de données NoSQL flexible et performant.

Un cas d'utilisation concret serait la création d'une application de gestion de tâches, où chaque utilisateur peut créer, mettre à jour, supprimer et afficher ses tâches. Cela nécessite une API RESTful pour gérer les données côté serveur et MongoDB pour stocker ces tâches de manière distribuée et scalable.

Prerequis

  • Connaissance des bases de JavaScript ES6+
  • Familiarité avec la programmation asynchrone (async/await)
  • Installation de Node.js (version recommandée : 14.x ou ultérieure)
  • MongoDB installé et en cours d'exécution

Concepts fondamentaux

Express.js

Express.js est un framework minimaliste pour construire des applications web et les API. Il offre une structure robuste autour du Router, de la gestion des requêtes HTTP et des middleware.

// 👇 Importer express
const express = require('express');

// 👇 Créer une application express
const app = express();

// 👇 Définir un routeur pour les tâches
app.get('/tasks', (req, res) => {
  // 👇 Renvoyer une réponse JSON
  res.json({ tasks: [] });
});

// 👇 Démarrer le serveur sur le port 3000
app.listen(3000, () => {
  console.log('Serveur démarré sur http://localhost:3000');
});

MongoDB

MongoDB est une base de données NoSQL qui utilise des documents JSON pour stocker les données. Elle offre une flexibilité et une performance élevées.

// 👇 Importer mongoose (ORM pour MongoDB)
const mongoose = require('mongoose');

// 👇 Connexion à la base de données
mongoose.connect('mongodb://localhost:27017/task-manager', {
  useNewUrlParser: true,
  useUnifiedTopology: true
}).then(() => {
  console.log('Connexion réussie à MongoDB');
}).catch(err => {
  console.error('Erreur de connexion à MongoDB:', err);
});

Middleware

Le middleware est une fonction qui a accès aux objets request (req), response (res) et la chaîne de middleware suivante dans le cycle de requête-réponse d'Express. Les middlewares peuvent être utilisés pour effectuer diverses tâches comme la validation des données, l'autentification, etc.

// 👇 Middleware simple pour logger les requêtes
app.use((req, res, next) => {
  console.log(`Requête reçue: ${req.method} ${req.url}`);
  next();
});

Schémas et Modèles Mongoose

Mongoose est un ORM pour MongoDB qui facilite la création de schémas et le mapping entre les documents JSON et les objets JavaScript.

// 👇 Importer mongoose
const mongoose = require('mongoose');

// 👇 Définir un schema pour les tâches
const taskSchema = new mongoose.Schema({
  title: String,
  description: String,
  completed: Boolean
});

// 👇 Créer un modèle basé sur le schéma
const Task = mongoose.model('Task', taskSchema);

Mise en pratique : projet fil rouge

Étape 1 : Initialisation du projet

## 👇 Créer un nouveau dossier pour le projet et y naviguer
mkdir express-mongo-todo && cd express-mongo-todo

## 👇 Initialiser un nouveau projet Node.js
npm init -y

## 👇 Installer les dépendances nécessaires
npm install express mongoose body-parser cors dotenv

Créer un fichier .env pour stocker les variables d'environnement :

DB_HOST=mongodb://localhost:27017
DB_NAME=task-manager
PORT=3000

Étape 2 : Configuration de l'application

Créez un fichier app.js avec le contenu suivant :

// 👇 Importer les modules nécessaires
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const cors = require('cors');

// 👇 Charger les variables d'environnement
require('dotenv').config();

// 👇 Créer une application express
const app = express();

// 👇 Middleware de configuration
app.use(bodyParser.json());
app.use(cors());

// 👇 Connexion à la base de données MongoDB
mongoose.connect(`${process.env.DB_HOST}/${process.env.DB_NAME}`, {
  useNewUrlParser: true,
  useUnifiedTopology: true
}).then(() => {
  console.log('Connexion réussie à MongoDB');
}).catch(err => {
  console.error('Erreur de connexion à MongoDB:', err);
});

// 👇 Définir un routeur pour les tâches
app.get('/tasks', async (req, res) => {
  try {
    const tasks = await Task.find();
    res.json(tasks);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

// 👇 Définir un routeur pour créer une tâche
app.post('/tasks', async (req, res) => {
  const task = new Task(req.body);
  try {
    await task.save();
    res.status(201).json(task);
  } catch (err) {
    res.status(400).json({ error: err.message });
  }
});

// 👇 Démarrer le serveur sur le port défini
app.listen(process.env.PORT, () => {
  console.log(`Serveur démarré sur http://localhost:${process.env.PORT}`);
});

Étape 3 : Création du modèle de données

Créez un fichier models/Task.js avec le contenu suivant :

// 👇 Importer mongoose
const mongoose = require('mongoose');

// 👇 Définir un schema pour les tâches
const taskSchema = new mongoose.Schema({
  title: {
    type: String,
    required: true
  },
  description: {
    type: String,
    required: true
  },
  completed: {
    type: Boolean,
    default: false
  }
});

// 👇 Créer un modèle basé sur le schéma
const Task = mongoose.model('Task', taskSchema);

module.exports = Task;

Étape 4 : Tester l'application

Démarrez votre application en utilisant la commande suivante :

node app.js

Ouvrez votre navigateur et allez à http://localhost:3000/tasks pour voir la liste des tâches.

Erreurs frequentes et debugging

Erreur 1 : Connection échouée

Code incorrect :

mongoose.connect('mongodb://localhost:27017/task-manager', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

Correction :

mongoose.connect(`${process.env.DB_HOST}/${process.env.DB_NAME}`, {
  useNewUrlParser: true,
  useUnifiedTopology: true
}).then(() => {
  console.log('Connexion réussie à MongoDB');
}).catch(err => {
  console.error('Erreur de connexion à MongoDB:', err);
});

Erreur 2 : Middleware d'authentification manquant

Code incorrect :

app.use(cors());

Correction :

const cors = require('cors');

app.use(cors({
  origin: 'http://localhost:3000'
}));

Erreur 3 : Route non trouvée

Code incorrect :

app.get('/tasks', async (req, res) => {
  const tasks = await Task.find();
  res.json(tasks);
});

Correction :

app.get('/tasks', async (req, res) => {
  try {
    const tasks = await Task.find();
    res.json(tasks);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

Pour aller plus loin

1. Ajout de fonctionnalités avancées

Vous pouvez ajouter des fonctionnalités comme la mise à jour et la suppression de tâches :

app.put('/tasks/:id', async (req, res) => {
  try {
    const task = await Task.findByIdAndUpdate(req.params.id, req.body, { new: true });
    res.json(task);
  } catch (err) {
    res.status(400).json({ error: err.message });
  }
});

app.delete('/tasks/:id', async (req, res) => {
  try {
    const task = await Task.findByIdAndDelete(req.params.id);
    res.json(task);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

2. Utilisation de MongoDB Atlas

MongoDB Atlas est une solution de base de données cloud qui simplifie le déploiement et la gestion des bases de données MongoDB.

3. Ajout d'authentification JWT

Pour sécuriser votre API, vous pouvez utiliser l'authentification avec JSON Web Tokens (JWT).

Défi pratique :

Créez une application simple d'un chaton qui permet aux utilisateurs de s'inscrire et de se connecter en utilisant le système JWT. L'application doit offrir les fonctionnalités suivantes :

  • Inscription
  • Connexion
  • Création, mise à jour et suppression de chats

Commencez par créer un nouveau projet avec Express.js et MongoDB, puis implémentez les routes nécessaires pour l'authentification et la gestion des chats.

Besoin d'aide sur Express ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Comment installer Express.js avec MongoDB?
Pour installer Express.js avec MongoDB, commencez par créer un nouveau projet Node.js en utilisant `npm init`. Ensuite, installez Express et Mongoose (le driver MongoDB pour Node.js) en exécutant les commandes suivantes : `npm install express` et `npm install mongoose`.
Comment établir une connexion à la base de données MongoDB dans un projet Express?
Pour établir une connexion à MongoDB dans votre application Express, utilisez le code suivant : `const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/monBaseDeDonnees', { useNewUrlParser: true, useUnifiedTopology: true });` N'oubliez pas de remplacer `'monBaseDeDonnees'` par le nom de votre base de données MongoDB.
Comment créer un modèle Mongoose pour une collection spécifique?
Pour créer un modèle Mongoose, vous devez d'abord définir un schéma (Schema) qui décrit la structure des documents dans votre collection. Ensuite, utilisez ce schéma pour créer le modèle avec `mongoose.model('NomDuModel', schema);`. Par exemple, si vous voulez créer un modèle pour une collection de utilisateurs, vous pouvez écrire : `const User = mongoose.model('User', userSchema);`.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.