Express Fundamentals
Express.js is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications.
Why Express?
- Minimal and unopinionated: Freedom to structure your application
- Robust routing: Powerful routing mechanism
- Middleware: Extensive middleware ecosystem
- Performance: Built on Node.js for fast I/O operations
Installation
npm install express
Your First Express Server
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.send('Hello, Express!');
});
app.listen(PORT, () => {
console.log(`Server running on http://localhost:${PORT}`);
});
Request Flow in Express
graph LR
A[Client Request] --> B[Express App]
B --> C[Middleware 1]
C --> D[Middleware 2]
D --> E[Route Handler]
E --> F[Response]
F --> G[Client]
Routing
Basic Routes
// GET request
app.get('/users', (req, res) => {
res.json([{ id: 1, name: 'John' }]);
});
// POST request
app.post('/users', (req, res) => {
res.status(201).json({ message: 'User created' });
});
// PUT request
app.put('/users/:id', (req, res) => {
const { id } = req.params;
res.json({ message: `User ${id} updated` });
});
// DELETE request
app.delete('/users/:id', (req, res) => {
res.status(204).send();
});
Route Parameters
// URL parameters
app.get('/users/:id', (req, res) => {
const userId = req.params.id;
res.json({ id: userId });
});
// Query parameters
app.get('/search', (req, res) => {
const { q, limit } = req.query;
res.json({ query: q, limit: limit || 10 });
});
Middleware
Middleware functions have access to request and response objects.
// Application-level middleware
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next();
});
// Built-in middleware
app.use(express.json()); // Parse JSON bodies
app.use(express.static('public')); // Serve static files
// Custom middleware
const validateUser = (req, res, next) => {
if (!req.body.name) {
return res.status(400).json({ error: 'Name required' });
}
next();
};
app.post('/users', validateUser, (req, res) => {
res.json({ message: 'User created', name: req.body.name });
});
Response Methods
app.get('/examples', (req, res) => {
// Send JSON
res.json({ key: 'value' });
// Send text
res.send('Hello');
// Set status
res.status(404).json({ error: 'Not found' });
// Redirect
res.redirect('/new-url');
// Download file
res.download('/path/to/file.pdf');
});