Express.js Basics & Routing
Express.js is the most popular Node.js web framework. It simplifies routing, middleware management, and HTTP request handling with a minimal, unopinionated API.
1 Setting Up Express
Terminal — Install Express
npm install express
npm install --save-dev nodemon
JavaScript — Basic Express App
const express = require('express');
const app = express();
// Parse JSON request bodies
app.use(express.json());
// Basic GET route
app.get('/', (req, res) => {
res.json({ message: 'Welcome to the API!', version: '1.0' });
});
// Route with URL parameter
app.get('/users/:id', (req, res) => {
const { id } = req.params;
res.json({ userId: id, name: 'Balaji Nayak' });
});
// Route with query parameters: /search?q=node&limit=10
app.get('/search', (req, res) => {
const { q, limit = 20 } = req.query;
res.json({ query: q, maxResults: Number(limit) });
});
// POST route
app.post('/users', (req, res) => {
const { name, email } = req.body;
res.status(201).json({ id: Date.now(), name, email });
});
app.listen(3000, () => console.log('Express running on port 3000'));
2 Express Router (Modular Routes)
JavaScript — routes/users.js
const express = require('express');
const router = express.Router();
// All routes here are prefixed with /users (set in app.js)
router.get('/', (req, res) => res.json({ users: [] }));
router.get('/:id', (req, res) => res.json({ id: req.params.id }));
router.post('/', (req, res) => res.status(201).json(req.body));
router.put('/:id', (req, res) => res.json({ updated: req.params.id }));
router.delete('/:id', (req, res) => res.json({ deleted: req.params.id }));
module.exports = router;
JavaScript — app.js (mounting routes)
const express = require('express');
const usersRouter = require('./routes/users');
const app = express();
app.use(express.json());
// Mount the router at /users prefix
app.use('/users', usersRouter);
app.listen(3000);
3 Code Challenge
Challenge: Create an Express router for a
/products resource with full CRUD routes. Store products in a JavaScript array (in-memory) and implement proper HTTP status codes for each operation.