IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NodeJS Discussion :

Implémenter les routes GET/POST/put/Delete


Sujet :

NodeJS

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 31
    Points : 27
    Points
    27
    Par défaut Implémenter les routes GET/POST/put/Delete
    Bonsoir,j'ai un exercice qui me demande d'implementer les routes GET/POST/put/Delete pour les fonctionalité d'un panier sur un site ,voici le code
    Code NodeJS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    const express = require('express')
    const router = express.Router()
    const articles = require('../data/articles.js')
     
    class Panier {
      constructor () {
        this.createdAt = new Date()
        this.updatedAt = new Date()
        this.articles = []
      }
    }
     
    /**
     * Dans ce fichier, vous trouverez des exemples de requêtes GET, POST, PUT et DELETE
     * Ces requêtes concernent l'ajout ou la suppression d'articles sur le site
     * Votre objectif est, en apprenant des exemples de ce fichier, de créer l'API pour le panier de l'utilisateur
     *
     * Notre site ne contient pas d'authentification, ce qui n'est pas DU TOUT recommandé.
     * De même, les informations sont réinitialisées à chaque redémarrage du serveur, car nous n'avons pas de système de base de données pour faire persister les données
     */
     
    /**
     * Notre mécanisme de sauvegarde des paniers des utilisateurs sera de simplement leur attribuer un panier grâce à req.session, sans authentification particulière
     */
    router.use((req, res, next) => {
      // l'utilisateur n'est pas reconnu, lui attribuer un panier dans req.session
      if (typeof req.session.panier === 'undefined') {
        req.session.panier = new Panier()
      }
      next()
    })
     
    /*
     * Cette route doit retourner le panier de l'utilisateur, grâce à req.session
     */
    router.get('/panier', (req, res) => {
       const id = parseInt(req.body.articleID)
       const quant = parseInt(req.body.quantite)
     
       if (isquant)
    })
     
    /*
     * Cette route doit ajouter un article au panier, puis retourner le panier modifié à l'utilisateur
     * Le body doit contenir l'id de l'article, ainsi que la quantité voulue
     */
    router.post('/panier', (req, res) => {
      res.status(501).json({ message: 'Not implemented' })
    })
     
    /*
     * Cette route doit permettre de confirmer un panier, en recevant le nom et prénom de l'utilisateur
     * Le panier est ensuite supprimé grâce à req.session.destroy()
     */
    router.post('/panier/pay', (req, res) => {
      res.status(501).json({ message: 'Not implemented' })
    })
     
    /*
     * Cette route doit permettre de changer la quantité d'un article dans le panier
     * Le body doit contenir la quantité voulue
     */
    router.put('/panier/:articleId', (req, res) => {
      res.status(501).json({ message: 'Not implemented' })
    })
     
    /*
     * Cette route doit supprimer un article dans le panier
     */
    router.delete('/panier/:articleId', (req, res) => {
      res.status(501).json({ message: 'Not implemented' })
    })
     
     
    /**
     * Cette route envoie l'intégralité des articles du site
     */
    router.get('/articles', (req, res) => {
      res.json(articles)
    })
     
    /**
     * Cette route crée un article.
     * WARNING: dans un vrai site, elle devrait être authentifiée et valider que l'utilisateur est bien autorisé
     * NOTE: lorsqu'on redémarre le serveur, l'article ajouté disparait
     *   Si on voulait persister l'information, on utiliserait une BDD (mysql, etc.)
     */
    router.post('/article', (req, res) => {
      const name = req.body.name
      const description = req.body.description
      const image = req.body.image
      const price = parseInt(req.body.price)
     
      // vérification de la validité des données d'entrée
      if (typeof name !== 'string' || name === '' ||
          typeof description !== 'string' || description === '' ||
          typeof image !== 'string' || image === '' ||
          isNaN(price) || price <= 0) {
        res.status(400).json({ message: 'bad request' })
        return
      }
     
      const article = {
        id: articles.length + 1,
        name: name,
        description: description,
        image: image,
        price: price
      }
      articles.push(article)
      // on envoie l'article ajouté à l'utilisateur
      res.json(article)
    })
     
    /**
     * Cette fonction fait en sorte de valider que l'article demandé par l'utilisateur
     * est valide. Elle est appliquée aux routes:
     * - GET /article/:articleId
     * - PUT /article/:articleId
     * - DELETE /article/:articleId
     * Comme ces trois routes ont un comportement similaire, on regroupe leurs fonctionnalités communes dans un middleware
     */
    function parseArticle (req, res, next) {
      const articleId = parseInt(req.params.articleId)
     
      // si articleId n'est pas un nombre (NaN = Not A Number), alors on s'arrête
      if (isNaN(articleId)) {
        res.status(400).json({ message: 'articleId should be a number' })
        return
      }
      // on affecte req.articleId pour l'exploiter dans toutes les routes qui en ont besoin
      req.articleId = articleId
     
      const article = articles.find(a => a.id === req.articleId)
      if (!article) {
        res.status(404).json({ message: 'article ' + articleId + ' does not exist' })
        return
      }
      // on affecte req.article pour l'exploiter dans toutes les routes qui en ont besoin
      req.article = article
      next()
    }
     
    router.route('/article/:articleId')
      /**
       * Cette route envoie un article particulier
       */
      .get(parseArticle, (req, res) => {
        // req.article existe grâce au middleware parseArticle
        res.json(req.article)
      })
     
      /**
       * Cette route modifie un article.
       * WARNING: dans un vrai site, elle devrait être authentifiée et valider que l'utilisateur est bien autorisé
       * NOTE: lorsqu'on redémarre le serveur, la modification de l'article disparait
       *   Si on voulait persister l'information, on utiliserait une BDD (mysql, etc.)
       */
      .put(parseArticle, (req, res) => {
        const name = req.body.name
        const description = req.body.description
        const image = req.body.image
        const price = parseInt(req.body.price)
     
        req.article.name = name
        req.article.description = description
        req.article.image = image
        req.article.price = price
        res.send()
      })
     
      .delete(parseArticle, (req, res) => {
        const index = articles.findIndex(a => a.id === req.articleId)
     
        articles.splice(index, 1) // remove the article from the array
        res.send()
      })
     
    module.exports = router

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    je pense que le but de l'exercice est de créer une API CRUD après je ne maitrise pas trop le langage, un peu d'aide?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    MAJ:
    j'ai encore modifié mon get et mon post mais j'ai des soucis pour mon delete et mon put
    Code NodeJS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    const express = require('express')
    const router = express.Router()
    const articles = require('../data/articles.js')
     
    class Panier {
      constructor () {
        this.createdAt = new Date()
        this.updatedAt = new Date()
        this.articles = []
      }
    }
     
    /**
     * Dans ce fichier, vous trouverez des exemples de requêtes GET, POST, PUT et DELETE
     * Ces requêtes concernent l'ajout ou la suppression d'articles sur le site
     * Votre objectif est, en apprenant des exemples de ce fichier, de créer l'API pour le panier de l'utilisateur
     *
     * Notre site ne contient pas d'authentification, ce qui n'est pas DU TOUT recommandé.
     * De même, les informations sont réinitialisées à chaque redémarrage du serveur, car nous n'avons pas de système de base de données pour faire persister les données
     */
     
    /**
     * Notre mécanisme de sauvegarde des paniers des utilisateurs sera de simplement leur attribuer un panier grâce à req.session, sans authentification particulière
     */
    router.use((req, res, next) => {
      // l'utilisateur n'est pas reconnu, lui attribuer un panier dans req.session
      if (typeof req.session.panier === 'undefined') {
        req.session.panier = new Panier()
      }
      next()
    })
     
    /*
     * Cette route doit retourner le panier de l'utilisateur, grâce à req.session
     */
    router.get('/panier', (req, res) => {
       const id = parseInt(req.body.articleID)
       const quant = parseInt(req.body.quantite)
       res.json(req.session.panier)
     
       if (isquant)
       })
     
    /*
     * Cette route doit ajouter un article au panier, puis retourner le panier modifié à l'utilisateur
     * Le body doit contenir l'id de l'article, ainsi que la quantité voulue
     */
    router.post('/panier', (req, res) => {
      res.status(501).json({ message: 'Not implemented' })
      const id = parseInt(req.body.articleID)
      const quant = parseInt(req.body.quantite)
     
      // vérification de la validité des données d'entrée
      if (typeof name !== 'string' || name === '' ||
          typeof description !== 'string' || description === '' ||
          typeof image !== 'string' || image === '' ||
          isNaN(price) || price <= 0) {
        res.status(400).json({ message: 'bad request' })
        return
      }
     
      const panier= {
        id: parseInt(req.body.articleID) ,
        quant : parseInt(req.body.quantite)+1,
     
      }
      // on envoie l'article ajouté à l'utilisateur
      res.json(req.session.panier)
    })
     
    /*
     * Cette route doit permettre de confirmer un panier, en recevant le nom et prénom de l'utilisateur
     * Le panier est ensuite supprimé grâce à req.session.destroy()
     */
    router.post('/panier/pay', (req, res) => {
      res.status(501).json({ message: 'Not implemented' })
    })
     
    /*
     * Cette route doit permettre de changer la quantité d'un article dans le panier
     * Le body doit contenir la quantité voulue
     */
    router.put('/panier/:articleId', (req, res) => {
      res.status(501).json({ message: 'Not implemented' })
      const id = req.body.articleID
      const quant = req.body.quantite
    })
     
    /*
     * Cette route doit supprimer un article dans le panier
     */
    router.delete('/panier/:articleId', (req, res) => {
      res.status(501).json({ message: 'Not implemented' })
      const index = req.session.panier.findIndex(req.session.panier)
    })
     
     
    /**
     * Cette route envoie l'intégralité des articles du site
     */
    router.get('/articles', (req, res) => {
      res.json(articles)
    })
     
    /**
     * Cette route crée un article.
     * WARNING: dans un vrai site, elle devrait être authentifiée et valider que l'utilisateur est bien autorisé
     * NOTE: lorsqu'on redémarre le serveur, l'article ajouté disparait
     *   Si on voulait persister l'information, on utiliserait une BDD (mysql, etc.)
     */
    router.post('/article', (req, res) => {
      const name = req.body.name
      const description = req.body.description
      const image = req.body.image
      const price = parseInt(req.body.price)
     
      // vérification de la validité des données d'entrée
      if (typeof name !== 'string' || name === '' ||
          typeof description !== 'string' || description === '' ||
          typeof image !== 'string' || image === '' ||
          isNaN(price) || price <= 0) {
        res.status(400).json({ message: 'bad request' })
        return
      }
     
      const article = {
        id: articles.length + 1,
        name: name,
        description: description,
        image: image,
        price: price
      }
      articles.push(article)
      // on envoie l'article ajouté à l'utilisateur
      res.json(article)
    })
     
    /**
     * Cette fonction fait en sorte de valider que l'article demandé par l'utilisateur
     * est valide. Elle est appliquée aux routes:
     * - GET /article/:articleId
     * - PUT /article/:articleId
     * - DELETE /article/:articleId
     * Comme ces trois routes ont un comportement similaire, on regroupe leurs fonctionnalités communes dans un middleware
     */
    function parseArticle (req, res, next) {
      const articleId = parseInt(req.params.articleId)
     
      // si articleId n'est pas un nombre (NaN = Not A Number), alors on s'arrête
      if (isNaN(articleId)) {
        res.status(400).json({ message: 'articleId should be a number' })
        return
      }
      // on affecte req.articleId pour l'exploiter dans toutes les routes qui en ont besoin
      req.articleId = articleId
     
      const article = articles.find(a => a.id === req.articleId)
      if (!article) {
        res.status(404).json({ message: 'article ' + articleId + ' does not exist' })
        return
      }
      // on affecte req.article pour l'exploiter dans toutes les routes qui en ont besoin
      req.article = article
      next()
    }
     
    router.route('/article/:articleId')
      /**
       * Cette route envoie un article particulier
       */
      .get(parseArticle, (req, res) => {
        // req.article existe grâce au middleware parseArticle
        res.json(req.article)
      })
     
      /**
       * Cette route modifie un article.
       * WARNING: dans un vrai site, elle devrait être authentifiée et valider que l'utilisateur est bien autorisé
       * NOTE: lorsqu'on redémarre le serveur, la modification de l'article disparait
       *   Si on voulait persister l'information, on utiliserait une BDD (mysql, etc.)
       */
      .put(parseArticle, (req, res) => {
        const name = req.body.name
        const description = req.body.description
        const image = req.body.image
        const price = parseInt(req.body.price)
     
        req.article.name = name
        req.article.description = description
        req.article.image = image
        req.article.price = price
        res.send()
      })
     
      .delete(parseArticle, (req, res) => {
        const index = articles.findIndex(a => a.id === req.articleId)
     
        articles.splice(index, 1) // remove the article from the array
        res.send()
      })
     
    module.exports = router

Discussions similaires

  1. Pourquoi utiliser les méthodes Get et Post dans un controleur
    Par momjunior dans le forum Spring Boot
    Réponses: 2
    Dernier message: 02/06/2019, 19h52
  2. [XSLT 2.0] Récupérer les arguments GET/POST
    Par Neckara dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 24/10/2014, 19h42
  3. [AJAX] Caractères avec les variables GET/POST
    Par bisbis dans le forum AJAX
    Réponses: 3
    Dernier message: 11/09/2012, 15h36
  4. Passer les requetes GET et POST en UTF-8
    Par deudtens dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 05/05/2008, 10h08
  5. Est il possible de masquer les paramètres GET ou POST?
    Par samsso2006 dans le forum Langage
    Réponses: 15
    Dernier message: 18/04/2007, 11h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo