Développer une API Rest avec NodeJS, Express et MongoDB: #4 Le body et les paramètres
Tags: node, mongodb, express, french
Published: 2022-09-18 12:18:42

---
title: Développer une API Rest avec NodeJS, Express et MongoDB: #4 Le body et les paramètres
published: true
description: C'est bon! on sait parler et donner des ordres, c'est cool mais il me faut pouvoir dire "Un cafè... SANS SUCRE!" ce seras possible avec le body et les params
tags: node, mongodb, express, french
# cover_image: https://direct_url_to_image.jpg
# Use a ratio of 100:42 for best results.
---

## 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:
```js
app.delete("/champions/:id", (request, response) => {
// ...etc...
```

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`:

```js
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?",
  })
})
```

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


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ub8dn3fkbc9km6wi701r.gif)

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

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n1n0io8cit1imboavfyy.gif)

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`.


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

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zbtdpqtb99dbnm4qk7ft.gif)

Je peux aussi faire ca comme suit pour les enchainer:

```js
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}
 ?`,
  })
})
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fanf6n0ue4qvj819oaao.gif)

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

Ce qui donne:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mb96tlm9r7qf5q6d3l2y.gif)


## Je peux tout mélanger si je veux
```js
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} ?`,
  })
})
```


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5fmqq3mm3akk6gjeyl01.gif)


## 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".