Introduction : pourquoi un client HTTP est-il nécessaire dans Node.js ?
Dans le développement web moderne, il est impossible de se passer d'interactions avec des services externes. Qu'il s'agisse d'envoyer des données à un serveur, d'obtenir le taux de change, de travailler avec une REST API ou de s'intégrer à des plateformes cloud, tout cela nécessite de savoir envoyer des requêtes HTTP. Dans l'environnement Node.js, il existe plusieurs approches pour cela : du module intégré http aux bibliothèques tierces populaires comme axios et le fetch natif.
Dans cet article, nous allons voir comment organiser correctement un client HTTP en JavaScript (Node.js), quels outils choisir pour différentes tâches et comment éviter les erreurs typiques. Vous apprendrez à traiter les réponses, à gérer l'asynchronisme et à écrire un code propre et maintenable.
Les principales façons de créer des requêtes HTTP dans Node.js
Node.js offre au développeur plusieurs options pour travailler avec HTTP. Examinons les trois principales : le module intégré http, la bibliothèque axios et le fetch natif.
1. Le module intégré http/https
La méthode la plus bas niveau. Elle donne un contrôle total sur la requête, mais nécessite d'écrire plus de code. Elle convient aux cas où l'on veut minimiser les dépendances ou travailler avec des protocoles non standard.
Exemple d'une requête GET utilisant le module https :
const https = require('https');
function getUsers() { return new Promise((resolve, reject) => { https.get('https://jsonplaceholder.typicode.com/users', (res) => { let data = ''; res.on('data', chunk => data += chunk); res.on('end', () => resolve(JSON.parse(data))); }).on('error', reject); });}
getUsers().then(users => console.log(users[0].name));Avantages : aucune dépendance externe, contrôle total.
Inconvénients : code verbeux, nécessité d'envelopper dans une Promise, gestion manuelle des flux.
2. La bibliothèque axios
La bibliothèque la plus populaire pour les requêtes HTTP. Elle fonctionne à la fois dans le navigateur et dans Node.js. Elle supporte les Promises, les intercepteurs, l'analyse JSON automatique et l'annulation de requêtes.
Installation :
npm install axiosExemple d'une requête POST avec axios :
const axios = require('axios');
async function createPost() { try { const response = await axios.post('https://jsonplaceholder.typicode.com/posts', { title: 'Client HTTP en JavaScript', body: 'Faire des requêtes correctement', userId: 1 }); console.log('Post créé :', response.data); } catch (error) { console.error('Erreur :', error.message); }}
createPost();Avantages : API simple, traitement JSON automatique, intercepteurs, timeouts.
Inconvénients : nécessite une installation, taille de la bibliothèque (~14 KB gzip).
3. Le fetch natif (Node.js 18+)
Depuis la version Node.js 18, fetch est devenu une fonction intégrée. Cela unifie le code entre le navigateur et le serveur. Cependant, dans les anciennes versions de Node.js, un polyfill sera nécessaire.
Exemple avec fetch et async/await :
async function getUser(id) { const response = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const user = await response.json(); return user;}
getUser(1).then(user => console.log(user.name));Avantages : natif, ne nécessite pas d'installation, API moderne.
Inconvénients : non supporté dans Node.js < 18, pas de timeout intégré, vérification manuelle du statut requise.
Gestion correcte des erreurs et des timeouts
L'un des problèmes les plus courants lors du travail avec des clients HTTP est l'ignorance de la gestion des erreurs. Le réseau n'est pas fiable, le serveur peut répondre par une erreur 500 ou ne pas répondre du tout.