Node.js7 min read

HTTP Module: Creating a Basic Server

Learn to create HTTP servers in Node.js without frameworks. Understand the foundation of web servers.

Sarah Chen
December 19, 2025
0.0k0

HTTP Module: Creating a Basic Server

Before Express, there's the http module. Understanding it helps you grasp how servers work.

Basic Server

const http = require('http');

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World!');
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000');
});

Request Object (req)

const server = http.createServer((req, res) => {
  console.log(req.method);      // GET, POST, etc.
  console.log(req.url);         // /path?query=value
  console.log(req.headers);     // { host: 'localhost', ... }
  
  res.end('Request received');
});

Response Object (res)

const server = http.createServer((req, res) => {
  // Set status code
  res.statusCode = 200;
  
  // Set headers
  res.setHeader('Content-Type', 'application/json');
  res.setHeader('X-Custom-Header', 'MyValue');
  
  // Or all at once
  res.writeHead(200, {
    'Content-Type': 'application/json',
    'X-Custom-Header': 'MyValue'
  });
  
  // Send response
  res.end(JSON.stringify({ message: 'Hello' }));
});

Simple Router

const http = require('http');

const server = http.createServer((req, res) => {
  const { method, url } = req;
  
  if (method === 'GET' && url === '/') {
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end('<h1>Home Page</h1>');
  } 
  else if (method === 'GET' && url === '/api/users') {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify([{ id: 1, name: 'Alice' }]));
  }
  else if (method === 'GET' && url === '/about') {
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end('<h1>About Page</h1>');
  }
  else {
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('Not Found');
  }
});

server.listen(3000);

Handling POST Data

const server = http.createServer((req, res) => {
  if (req.method === 'POST' && req.url === '/api/users') {
    let body = '';
    
    req.on('data', chunk => {
      body += chunk.toString();
    });
    
    req.on('end', () => {
      const user = JSON.parse(body);
      console.log('Received:', user);
      
      res.writeHead(201, { 'Content-Type': 'application/json' });
      res.end(JSON.stringify({ success: true, user }));
    });
  }
});

Serving Static Files

const http = require('http');
const fs = require('fs');
const path = require('path');

const server = http.createServer((req, res) => {
  let filePath = path.join(__dirname, 'public', req.url === '/' ? 'index.html' : req.url);
  const ext = path.extname(filePath);
  
  const contentTypes = {
    '.html': 'text/html',
    '.css': 'text/css',
    '.js': 'text/javascript',
    '.json': 'application/json'
  };
  
  fs.readFile(filePath, (err, content) => {
    if (err) {
      res.writeHead(404);
      res.end('File not found');
    } else {
      res.writeHead(200, { 'Content-Type': contentTypes[ext] || 'text/plain' });
      res.end(content);
    }
  });
});

Key Takeaway

The http module is Node.js's built-in way to create servers. It's low-level but teaches you the fundamentals. Express and other frameworks build on top of this. Know http basics, then use frameworks for real projects.

#Node.js#HTTP#Server#Beginner