Client HTTP en JavaScript : faire des requêtes correctement dans Node.js

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Client HTTP en JavaScript : faire des requêtes correctement dans Node.js



Le développement web moderne est impensable sans interaction avec des serveurs distants. Qu'il s'agisse de récupérer des données depuis une API REST, d'envoyer des formulaires ou de télécharger des fichiers — les requêtes HTTP sont au cœur de toute intégration. Si vous développez avec Node.js, vous disposez de plusieurs outils puissants pour créer un client HTTP. Dans cet article, nous allons voir comment faire des requêtes correctement : des modules intégrés aux bibliothèques populaires, en mettant l'accent sur la gestion des erreurs, les timeouts et la lisibilité du code.



Nous aborderons trois approches principales : le module intégré http/https, le moderne fetch (disponible dans Node.js 18+) et la légendaire bibliothèque axios. Pour chaque approche, vous trouverez des exemples pratiques et des recommandations.



1. Module intégré http/https : le classique du genre



Node.js inclut depuis le début les modules http et https pour travailler avec les requêtes réseau. C'est la méthode la plus bas niveau, qui offre un contrôle total sur le processus. Cependant, elle nécessite plus de code pour traiter la réponse.



Exemple de requête GET avec le module https :



const https = require('https');

function getUsers() { return new Promise((resolve, reject) => { const options = { hostname: 'jsonplaceholder.typicode.com', path: '/users', method: 'GET', headers: { 'Content-Type': 'application/json' } };

const req = https.request(options, (res) => { let data = '';

// Collecter les données par morceaux res.on('data', (chunk) => { data += chunk; });

// Quand la réponse est entièrement reçue res.on('end', () => { if (res.statusCode >= 200 && res.statusCode < 300) { resolve(JSON.parse(data)); } else { reject(new Error(`HTTP Error: ${res.statusCode}`)); } }); });

// Gestion des erreurs réseau req.on('error', (err) => { reject(err); });

// Timeout en cas de blocage req.setTimeout(5000, () => { req.destroy(); reject(new Error('Request timeout')); });

req.end(); });}

// UtilisationgetUsers() .then(users => console.log('Users:', users.length)) .catch(err => console.error('Error:', err.message));


Avantages :

  • Ne nécessite pas l'installation de paquets supplémentaires.
  • Contrôle total sur chaque étape de la connexion.


Inconvénients :

  • Beaucoup de code passe-partout.
  • Traitement manuel des chunks et assemblage du corps de la réponse.
  • Travail peu pratique avec les promesses sans wrapper.


Cette approche est justifiée si vous écrivez une bibliothèque pour travailler avec le réseau ou si vous avez besoin d'une performance maximale sans dépendances superflues. Dans les autres cas, il est préférable d'utiliser des solutions de plus haut niveau.



2. Fetch API : le standard moderne



À partir de Node.js 18, fetch est devenu une fonction intégrée, ce qui en a fait l'outil principal pour les requêtes HTTP. Il est basé sur les promesses et possède une syntaxe propre et intuitive.



Exemple de requête POST avec fetch :



async function createPost() {  const url = 'https://jsonplaceholder.typicode.com/posts';  const newPost = {    title: 'Client HTTP en JavaScript',    body: 'Faire des requêtes correctement',    userId: 1  };

try { const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(newPost) });

// Vérifier le statut de la réponse if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); }

const data = await response.json(); console.log('Created post ID:', data.id); return data; } catch (error) {

Blogs

Book Recommendations