Implementing HTTP Servers in Node.js with GET and POST Handling

HTTP Server Events in Node.js

HTTP Server objects provide the foundation for creating web servers in Node.js. They handle TCP socket operations, request processing, and response delivery. Key events include:

  • request: Triggered when a client request arives (callback: request, response)
  • connection: Fires on new TCP stream establishment (callback: socket)
  • close: Emitted when server shuts down (no parameters)
  • checkContinue: Handles Expect: 100-continue headers (callback: request, response)
  • connect: Processes HTTP CONNECT requests (callback: request, response, head)
  • upgrade: Manages HTTP upgrade requests (callback: request, response, head)
  • clientError: Handles client connection errors (callback: error, socket)

Server Initialization Methods

const server = require('http').createServer();
server.listen(3000, 'localhost', 512, () => {
  console.log('Server active on port 3000');
});

Alternative binding methods:

server.listen('/tmp/server.sock');
server.listen({fd: 12}); // Using file descriptor

GET Request Implementation

Server-Side Code

const http = require('http');
const greetings = ['Welcome', 'Node.js HTTP Server', 'Hello World'];

http.createServer((req, res) => {
  res.setHeader('Content-Type', 'text/html');
  res.writeHead(200);
  res.write('<html><body>');
  greetings.forEach(text => {
    res.write(`<h1>${text}</h1>`);
  });
  res.end('</body></html>');
}).listen(3000);

Client-Side Request

const http = require('http');
const clientOptions = {
  host: 'localhost',
  port: 3000,
  path: '/'
};

http.request(clientOptions, response => {
  let dataChunks = [];
  
  response.on('data', chunk => {
    dataChunks.push(chunk);
  });
  
  response.on('end', () => {
    console.log('Status:', response.statusCode);
    console.log('Headers:', response.headers);
    console.log(Buffer.concat(dataChunks).toString());
  });
}).end();

POST Request Implementation

Server Handling

const http = require('http');

http.createServer((req, res) => {
  let requestBody = '';
  
  req.on('data', chunk => {
    requestBody += chunk;
  });
  
  req.on('end', () => {
    const parsedData = JSON.parse(requestBody);
    const responseData = {
      greeting: `Hello ${parsedData.username}`,
      query: `Are you a ${parsedData.job}?`
    };
    res.writeHead(200, {'Content-Type': 'application/json'});
    res.end(JSON.stringify(responseData));
  });
}).listen(3001);

Client POST Request

const http = require('http');
const postOptions = {
  host: '127.0.0.1',
  port: 3001,
  method: 'POST',
  headers: {'Content-Type': 'application/json'}
};

const postRequest = http.request(postOptions, response => {
  let responseBuffer = '';
  
  response.on('data', chunk => {
    responseBuffer += chunk;
  });
  
  response.on('end', () => {
    const result = JSON.parse(responseBuffer);
    console.log('Server Response:', result);
  });
});

postRequest.write('{"username":"Gandalf", "job":"Wizard"}');
postRequest.end();

Tags: Node.js http-server GET-Requests POST-Requests event-handling

Posted on Mon, 02 Nov 2026 16:35:26 +0000 by J.Daniels