• 10 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 2/17/23

Enregistrez et récupérez des données

En utilisant le modèle Thing que nous avons créé dans le chapitre précédent, nous allons exploiter Mongoose. Vous verrez que l'enregistrement et la récupération de données dans la base de données est un jeu d'enfant ! Commençons par implémenter correctement notre route POST.

Enregistrement des Things dans la base de données

Pour pouvoir utiliser notre nouveau modèle Mongoose dans l'application, nous devons l'importer dans le fichier app.js :

const Thing = require('./models/thing');

Maintenant, remplacez la logique de votre route POST par :

app.post('/api/stuff', (req, res, next) => {
  delete req.body._id;
  const thing = new Thing({
    ...req.body
  });
  thing.save()
    .then(() => res.status(201).json({ message: 'Objet enregistré !'}))
    .catch(error => res.status(400).json({ error }));
});

Ici, vous créez une instance de votre modèle Thing en lui passant un objet JavaScript contenant toutes les informations requises du corps de requête analysé (en ayant supprimé en amont le faux_id envoyé par le front-end).

Ce modèle comporte une méthode save() qui enregistre simplement votre Thing dans la base de données.

La méthode save() renvoie une Promise. Ainsi, dans notre bloc then() , nous renverrons une réponse de réussite avec un code 201 de réussite. Dans notre bloc catch() , nous renverrons une réponse avec l'erreur générée par Mongoose ainsi qu'un code d'erreur 400.

Récupération de la liste de Things en vente

Désormais, nous pouvons implémenter notre route GET afin qu'elle renvoie tous les Things dans la base de données :

app.use('/api/stuff', (req, res, next) => {
  Thing.find()
    .then(things => res.status(200).json(things))
    .catch(error => res.status(400).json({ error }));
});

Dans l'exemple ci-dessus, nous utilisons la méthode find() dans notre modèle Mongoose afin de renvoyer un tableau contenant tous les Things dans notre base de données. À présent, si vous ajoutez un Thing , il doit s'afficher immédiatement sur votre page d'articles en vente.

En revanche, si vous cliquez sur l'un des Things , l'affichage d'un seul élément ne fonctionne pas. En effet, il tente d'effectuer un appel GET différent pour trouver un Thing individuel. Implémentons cette route maintenant.

Récupération d'un Thing spécifique

Ajoutons une autre route à notre application, juste après notre route POST :

app.get('/api/stuff/:id', (req, res, next) => {
  Thing.findOne({ _id: req.params.id })
    .then(thing => res.status(200).json(thing))
    .catch(error => res.status(404).json({ error }));
});

Dans cette route :

  • nous utilisons la méthode get() pour répondre uniquement aux demandes GET à cet endpoint ;

  • nous utilisons deux-points : en face du segment dynamique de la route pour la rendre accessible en tant que paramètre ;

  • nous utilisons ensuite la méthode findOne() dans notre modèle Thing pour trouver le Thing unique ayant le même _id que le paramètre de la requête ;

  • ce Thing est ensuite retourné dans une Promise et envoyé au front-end ;

  • si aucun Thing n'est trouvé ou si une erreur se produit, nous envoyons une erreur 404 au front-end, avec l'erreur générée.

Maintenant, notre application commence vraiment à prendre forme ! Nous pouvons créer des objets et les voir apparaître immédiatement dans notre boutique en ligne grâce à la base de données. Et nous pouvons même ouvrir un objet en particulier pour obtenir les informations de cet objet précis, via la base de données.

Dans le chapitre suivant, nous implémenterons nos boutons Modifier et Supprimer pour terminer la partie Thing de notre API.

En résumé

  • Les méthodes de votre modèle Thing permettent d'interagir avec la base de données :

    • save()  – enregistre un Thing ;

    • find()  – retourne tous les Things ;

    • findOne()  – retourne un seul Thing basé sur la fonction de comparaison qu'on lui passe (souvent pour récupérer un Thing par son identifiant unique).

  • La méthode  app.get()  permet de réagir uniquement aux requêtes de type GET.

Dans le prochain chapitre, nous utiliserons le reste des opérations CRUD pour mettre à jour et supprimer nos données dans la base de données. Allons-y ! 

Example of certificate of achievement
Example of certificate of achievement