0
0
NodejsHow-ToBeginner · 3 min read

How to Make HTTP Requests from Node.js: Simple Guide

In Node.js, you can make HTTP requests using the built-in http or https modules for basic needs, or use popular libraries like node-fetch or axios for easier and more powerful requests. These tools let you send GET, POST, and other HTTP methods to communicate with web servers.
📐

Syntax

Node.js provides the http and https modules to make HTTP requests. You create a request by calling http.request() or https.request() with options like URL, method, and headers. Then you listen for response events to get data.

Key parts:

  • options: Object with request details (hostname, path, method, headers)
  • callback: Function to handle the response
  • req.write(): Send data for POST requests
  • req.end(): Finalize the request
javascript
const https = require('https');

const options = {
  hostname: 'example.com',
  path: '/path',
  method: 'GET',
  headers: {
    'Content-Type': 'application/json'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => {
    data += chunk;
  });
  res.on('end', () => {
    console.log('Response:', data);
  });
});

req.on('error', (error) => {
  console.error('Error:', error);
});

req.end();
💻

Example

This example shows how to make a simple GET request to fetch JSON data from a public API using the https module. It prints the response body to the console.

javascript
const https = require('https');

https.get('https://jsonplaceholder.typicode.com/todos/1', (res) => {
  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('end', () => {
    console.log('Received data:', data);
  });
}).on('error', (err) => {
  console.error('Request error:', err.message);
});
Output
Received data: {"userId":1,"id":1,"title":"delectus aut autem","completed":false}
⚠️

Common Pitfalls

Common mistakes when making HTTP requests in Node.js include:

  • Forgetting to call req.end() which finalizes the request and sends it.
  • Not handling errors with req.on('error'), causing crashes.
  • Assuming response data comes all at once instead of listening for data events and concatenating chunks.
  • Using http module for https URLs, which will fail.

Using libraries like axios or node-fetch can avoid many of these issues by providing simpler APIs.

javascript
/* Wrong way: Missing req.end() */
const https = require('https');

const req = https.request('https://example.com', (res) => {
  res.on('data', (chunk) => {
    console.log(chunk.toString());
  });
});

// req.end() is missing here, so request never sends

/* Right way: */
const req2 = https.request('https://example.com', (res) => {
  res.on('data', (chunk) => {
    console.log(chunk.toString());
  });
});
req2.end();
📊

Quick Reference

Tips for making HTTP requests in Node.js:

  • Use https.get(url, callback) for simple GET requests.
  • Use https.request(options, callback) for more control (POST, headers).
  • Always call req.end() to send the request.
  • Handle errors with req.on('error').
  • Consider libraries like axios or node-fetch for easier syntax and promises.

Key Takeaways

Use Node.js built-in http or https modules to make HTTP requests with control over method and headers.
Always call req.end() to send the request and handle errors to avoid crashes.
Listen for data events to collect response chunks before processing.
For simpler code and promises, use libraries like axios or node-fetch.
Use https module for secure URLs and http module for non-secure URLs.