Node.js10 min read

Express.js Getting Started

Master Express.js web framework. Understand what Express is, why use it, architecture, routing, and middleware concepts.

Sarah Chen
December 19, 2025
0.0k0

Express.js Getting Started

What is Express?

Express is a minimal and flexible web framework for Node.js. It makes building web servers much easier.

The Problem: Building Servers with Node.js

Without Express, you need to handle everything manually:

const http = require('http');

const server = http.createServer((req, res) => {
  if (req.url === '/users' && req.method === 'GET') {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify([{ id: 1, name: 'John' }]));
  } else if (req.url === '/users' && req.method === 'POST') {
    let body = '';
    req.on('data', chunk => body += chunk);
    req.on('end', () => {
      const user = JSON.parse(body);
      res.writeHead(201);
      res.end(JSON.stringify(user));
    });
  } else {
    res.writeHead(404);
    res.end('Not Found');
  }
});

server.listen(3000);

Problems:

  • Manual URL parsing
  • Manual method checking
  • Manual body parsing
  • Manual headers
  • Lots of boilerplate code

The Solution: Express

Express simplifies everything:

const express = require('express');
const app = express();

app.get('/users', (req, res) => {
  res.json([{ id: 1, name: 'John' }]);
});

app.post('/users', (req, res) => {
  res.status(201).json(req.body);
});

app.listen(3000);

Benefits:

  • Automatic routing
  • Automatic body parsing
  • Clean syntax
  • Middleware support
  • Less code, more features

Express Architecture

┌─────────────────────────────────┐
│         HTTP Request             │
└──────────────┬────────────────────┘
               │
┌──────────────▼────────────────────┐
│         Express App               │
│  ┌────────────────────────────┐  │
│  │   Middleware Stack         │  │
│  │   - Body parser            │  │
│  │   - CORS                   │  │
│  │   - Authentication         │  │
│  │   - Logging                │  │
│  └────────────────────────────┘  │
│  ┌────────────────────────────┐  │
│  │   Router                    │  │
│  │   - GET /users              │  │
│  │   - POST /users             │  │
│  │   - PUT /users/:id          │  │
│  └────────────────────────────┘  │
└──────────────┬────────────────────┘
               │
┌──────────────▼────────────────────┐
│         HTTP Response              │
└─────────────────────────────────────┘

Why Use Express?

1. Simplifies Routing

Without Express: Manual URL parsing, if/else chains
With Express: Clean route definitions

2. Middleware Support

Request → Middleware 1 → Middleware 2 → Route Handler → Response

3. Large Ecosystem

  • Thousands of middleware packages
  • Well-documented
  • Community support

4. Industry Standard

  • Used by Netflix, Uber, PayPal
  • Most Node.js jobs require Express
  • Best practices established

Installation

npm init -y
npm install express

Hello World

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

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

Basic Routing

// GET request
app.get('/users', (req, res) => {
  res.json([{ id: 1, name: 'Alice' }]);
});

// POST request
app.post('/users', (req, res) => {
  res.status(201).json({ message: 'User created' });
});

// PUT request
app.put('/users/:id', (req, res) => {
  res.json({ message: `Updated user ${req.params.id}` });
});

// DELETE request
app.delete('/users/:id', (req, res) => {
  res.json({ message: `Deleted user ${req.params.id}` });
});

Route Parameters

// /users/123
app.get('/users/:id', (req, res) => {
  const userId = req.params.id;  // '123'
  res.json({ id: userId });
});

// /posts/2024/01
app.get('/posts/:year/:month', (req, res) => {
  const { year, month } = req.params;
  res.json({ year, month });
});

Query Parameters

// /search?q=nodejs&limit=10
app.get('/search', (req, res) => {
  const query = req.query.q;      // 'nodejs'
  const limit = req.query.limit;  // '10'
  res.json({ query, limit });
});

Request Body (JSON)

// Enable JSON parsing
app.use(express.json());

app.post('/users', (req, res) => {
  const { name, email } = req.body;
  console.log('Received:', name, email);
  res.status(201).json({ name, email });
});

Response Methods

app.get('/demo', (req, res) => {
  // Send text
  res.send('Hello');
  
  // Send JSON
  res.json({ message: 'Hello' });
  
  // Set status + send
  res.status(404).json({ error: 'Not found' });
  
  // Send file
  res.sendFile('/path/to/file.pdf');
  
  // Redirect
  res.redirect('/new-url');
});

Basic Error Handling

app.get('/users/:id', (req, res) => {
  const user = findUser(req.params.id);
  
  if (!user) {
    return res.status(404).json({ error: 'User not found' });
  }
  
  res.json(user);
});

Complete Example

const express = require('express');
const app = express();

// Middleware
app.use(express.json());

// In-memory "database"
let users = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' }
];

// Get all users
app.get('/api/users', (req, res) => {
  res.json(users);
});

// Get one user
app.get('/api/users/:id', (req, res) => {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (!user) return res.status(404).json({ error: 'Not found' });
  res.json(user);
});

// Create user
app.post('/api/users', (req, res) => {
  const user = {
    id: users.length + 1,
    name: req.body.name
  };
  users.push(user);
  res.status(201).json(user);
});

// Update user
app.put('/api/users/:id', (req, res) => {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (!user) return res.status(404).json({ error: 'Not found' });
  user.name = req.body.name;
  res.json(user);
});

// Delete user
app.delete('/api/users/:id', (req, res) => {
  users = users.filter(u => u.id !== parseInt(req.params.id));
  res.status(204).send();
});

app.listen(3000, () => console.log('Server running on port 3000'));

Key Takeaway

Express simplifies Node.js web development. Define routes with app.get(), app.post(), etc. Access params with req.params, query with req.query, body with req.body. Respond with res.json() or res.send(). That's the foundation!

#Node.js#Express#Web Framework#Intermediate