Cliente HTTP em JavaScript: fazendo requisições corretamente no Node.js

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que precisamos de um cliente HTTP no Node.js?

No desenvolvimento web moderno, é impossível prescindir da interação com serviços externos. Seja para enviar dados para um servidor, obter taxas de câmbio, trabalhar com REST API ou integrar com plataformas em nuvem — tudo isso requer a capacidade de enviar requisições HTTP. No ambiente Node.js, existem várias abordagens para isso: desde o módulo nativo http até bibliotecas de terceiros populares, como axios e o nativo fetch.

Neste artigo, vamos analisar como organizar corretamente um cliente HTTP em JavaScript (Node.js), quais ferramentas escolher para diferentes tarefas e como evitar erros típicos. Você aprenderá como processar respostas, gerenciar assincronia e escrever código limpo e sustentável.



Principais formas de criar requisições HTTP no Node.js

O Node.js oferece ao desenvolvedor várias opções para trabalhar com HTTP. Vamos considerar três principais: o módulo nativo http, a biblioteca axios e o nativo fetch.



1. Módulo nativo http/https

É a forma de mais baixo nível. Ela dá controle total sobre a requisição, mas requer escrever mais código. É adequada para casos onde é necessário minimizar dependências ou trabalhar com protocolos não padronizados.

Exemplo de requisição GET usando o módulo 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));

Prós: sem dependências externas, controle total.
Contras: código verboso, necessidade de encapsular em Promise, gerenciamento manual de streams.



2. Biblioteca axios

É a biblioteca mais popular para requisições HTTP. Funciona tanto no navegador quanto no Node.js. Suporta Promise, interceptadores (interceptors), parsing automático de JSON e cancelamento de requisições.

Instalação:

npm install axios

Exemplo de requisição POST com axios:

const axios = require('axios');

async function createPost() { try { const response = await axios.post('https://jsonplaceholder.typicode.com/posts', { title: 'Cliente HTTP em JavaScript', body: 'Fazendo requisições corretamente', userId: 1 }); console.log('Post criado:', response.data); } catch (error) { console.error('Erro:', error.message); }}

createPost();

Prós: API simples, processamento automático de JSON, interceptadores, timeouts.
Contras: requer instalação, tamanho da biblioteca (~14 KB gzip).



3. Nativo fetch (Node.js 18+)

A partir da versão Node.js 18, o fetch tornou-se uma função nativa. Isso unifica o código entre o navegador e o servidor. No entanto, em versões antigas do Node.js, será necessário um polyfill.

Exemplo com fetch e 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));

Prós: nativo, não requer instalação, API moderna.
Contras: não suportado no Node.js < 18, sem timeout nativo, requer verificação manual de status.



Tratamento correto de erros e timeouts

Um dos problemas mais comuns ao trabalhar com clientes HTTP é ignorar o tratamento de erros. A rede não é confiável, o servidor pode responder com um erro 500 ou não responder

Blogs

Book Recommendations