DEV Community

Sid Ali BENTIFRAOUINE
Sid Ali BENTIFRAOUINE

Posted on

Développer une API Rest avec NodeJS, Express et MongoDB: #4 Le body et les paramètres

le body

Je sais démarrer mon serveur, comment recevoir des requetes, comment les arranger selon le contexte et l'ordre donné.
GET/POST/PUT/DELETE.

Maintenant il me faut un moyen de faire passer de l'information à mes requetes.

Dans la partie #3, on a eu un petit teasing des params. Flashback:

app.delete("/champions/:id", (request, response) => {
// ...etc...
Enter fullscreen mode Exit fullscreen mode

Et bien maintenant, je vais aller plus loin. Vers l'infini et au-dela 🚀

Lorsque je recois une requete, j'ai accès dans mon callback (la petite fonction dont les deux premiers parametre sont request et response).

Le response n'est pas sorcier, on l'utilise depuis le début de ce cours.

Le request nous interesse beaucoup plus pour cette partie.
Amusons-nous à faire un console.log de ce que contient l'objet request.body:

app.post("/champions", (request, response) => {
  console.log(request.body)
  response.send({
    message: "Je veux bien créer un champion, mais c'est quoi son nom?",
  })
})
Enter fullscreen mode Exit fullscreen mode

Bon, rien d'interessant, allez je modifie ma requete sur Postman:

Image description

Bon j'ai que ca: {}, c'est normal je n'ai rien envoyé dans le body. Voilà comment je dois faire:

Image description

Voilà qui est beaucoup mieux: { name: 'Graves', description: 'Champion cancer' }

Et là je peux enchainer et utiliser mon body comme bon me semble request.body.name ou request.body.description.

lesparams

app.get("/champions/:id", (request, response) => {
  console.log(request.params)
  response.send({
    message: `T'as demandé le champion ${request.params.id} ?`,
  })
})
Enter fullscreen mode Exit fullscreen mode

Image description

Je peux aussi faire ca comme suit pour les enchainer:

app.get("/champions/:id/day/:day", (request, response) => {
  console.log(request.params.id)
  console.log(request.params.day)
  response.send({
    message: `T'as demandé le champion ${request.params.id}
 ?`,
  })
})
Enter fullscreen mode Exit fullscreen mode

Image description

les query params

app.get("/meteo", (request, response) => {
  console.log(request.query)
  response.send({
    message: `T'as demandé la meteo d'${request.query.start} à ${request.query.end} ?`,
  })
})
Enter fullscreen mode Exit fullscreen mode

Ce qui donne:

Image description

Je peux tout mélanger si je veux

app.get("/meteo/:ville", (request, response) => {
  console.log("Body", request.body)
  console.log("Params", request.params)
  console.log("Query", request.query)

  response.send({
    reponse: `Tu m'as dis ${body.message}`,
    ville: request.params.ville,
    meteo: `T'as demandé la meteo d'${request.query.start} à ${request.query.end} ?`,
  })
})
Enter fullscreen mode Exit fullscreen mode

Image description

La difference entre les trois

Le body est généralement utilisé pour donner de la donnée, comme des infos de création ou de mise à jour.

Tandis que les params vont plus etre utilisés pour dire, "je veux la donnée du champion avec l'id: 1", "je veux supprimer ca",

Les query, ce serait plus: donne moi les évenement de "telle date à telle date".

Top comments (4)

Collapse
 
ecyrbe profile image
ecyrbe

Vu que tu utilises express, peut être que zodios pourrait t'intéresser.
Tu peux le pluguer sur un serveur express existant, mais tu auras les annotations de types même en pur JavaScript et l'autocompletion .

Collapse
 
sidali profile image
Sid Ali BENTIFRAOUINE

Nice, je checkerai ca!

Collapse
 
thomasbnt profile image
Thomas Bonnet

Ah? Manque le contenu

Collapse
 
sidali profile image
Sid Ali BENTIFRAOUINE

Ah j'ai mis en published? my bad 🥲
Ce sera pret pour ce soir!