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();