2. Passer un paramètre depuis l’url

On vient de réussir à mettre en place un nouveau endpoint dans notre API Rest, mais cependant nous avons un problème. S’il y a 12 pokémons par exemple, est-ce que nous allons devoir créer 12 points de terminaison différents ?

app.get('/pokemons/1', (req, res) => ...)
app.get('/pokemons/2', (req, res) => ...)
app.get('/pokemons/3', (req, res) => ...)
// etc.

Et si nous avons 100 pokémons ? Non, notre solution précédente ne semble pas fiable finalement.

Mais alors… nous sommes foutus !?  😱

Mais non, mais non. Je vous ai dit que nous allions approfondir le fonctionnement des routes avec Express, vous vous rappelez ? Eh bien, avec Express, sachez qu’il est possible de récupérer des paramètres de l’URL, directement depuis nos endpoints, comme ceci :

Express nous permet de récupérer les paramètres de l’URL.

La solution que nous devons appliquer est simple, récupérer l’identifiant du pokémon contenu dans l’URL, la récupérer dans notre point de terminaison, et construire une réponse à partir de ses informations.

Pour accomplir cela, Express va nous filer un coup de main. Depuis notre endpoint, nous avons déjà à notre disposition un objet représentant la requête entrante req. Eh bien pour accéder au paramètre id de l’url, nous devons appeler req.params.id, tout simplement !

Et ce n’est pas un mensonge, regardez plutôt la version améliorée de notre endpoint précédent, depuis app.js :

// ...
 
app.get('/', (req, res) => res.send('Hello, Express!'))
 
// La version améliorée de notre endpoint précédent, avec des paramètres :
app.get('/api/pokemons/:id', (req, res) => {
  const id = req.params.id
  res.send(`Vous avez demandé le pokémon n°${id}.`)
})
 
// ...

Comme nous pouvons le voir ici, on définit une URL acceptant un paramètre grâce à la syntaxe « :id », à la ligne 6. Ainsi, Express va récupérer la valeur de ce paramètre, et le transmettre dans notre point de terminaison, via l’objet req.

C’est pour cela qu’aux lignes 7 et 8, on peut récupérer l’identifiant contenu dans l’url, et le transmettre dans la réponse au client.

Plutôt simple finalement, après la frayeur du début ! 😉