Express is the most popular Node.js web framework — minimal, flexible, and unopinionated.

Setup

  npm install express
  
  import express from 'express';

const app = express();
const PORT = process.env.PORT || 3000;

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

app.listen(PORT, () => {
    console.log(`Server running on port ${PORT}`);
});
  

Routing

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

// GET with route parameter
app.get('/users/:id', (req, res) => {
    const { id } = req.params;
    res.json({ id, name: 'Alice' });
});

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

// PUT, PATCH, DELETE
app.put('/users/:id', (req, res) => res.json({ updated: true }));
app.patch('/users/:id', (req, res) => res.json({ patched: true }));
app.delete('/users/:id', (req, res) => res.status(204).send());
  

Request Object

  app.get('/search', (req, res) => {
    const { q, page = 1, limit = 10 } = req.query;
    // /search?q=hello&page=2&limit=20
    res.json({ query: q, page: Number(page), limit: Number(limit) });
});

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

Response Methods

  res.send('Plain text');
res.json({ key: 'value' });
res.status(404).json({ error: 'Not found' });
res.redirect('/home');
res.sendFile('/path/to/file.html');
res.set('X-Custom-Header', 'value');
  

Body Parsing

  app.use(express.json());                    // JSON bodies
app.use(express.urlencoded({ extended: true })); // Form data

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

Static Files

  app.use(express.static('public'));
// Serves files from ./public at root URL
// public/style.css → /style.css
  

Router Module

Organize routes in separate files:

  // routes/users.js
import { Router } from 'express';
const router = Router();

router.get('/', (req, res) => res.json([]));
router.get('/:id', (req, res) => res.json({ id: req.params.id }));

export default router;

// app.js
import userRoutes from './routes/users.js';
app.use('/api/users', userRoutes);
  

404 Handler

  app.use((req, res) => {
    res.status(404).json({ error: 'Route not found' });
});
  

Express provides the foundation — middleware and REST API patterns are covered in the next chapters.