Skip to content
Plurafy

Express.js Framework

Building web applications with Express

Build scalable, maintainable web applications with Express framework.

Express is the most popular Node.js web framework, providing routing, middleware, and utilities for HTTP server development.

const express = require('express');
const app = express();
// Middleware
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Basic route
app.get('/', (req, res) => {
res.json({ message: 'Hello World' });
});
// Listen
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
// HTTP methods
app.get('/users', (req, res) => {
res.json({ users: [] });
});
app.post('/users', (req, res) => {
const user = req.body;
res.status(201).json(user);
});
app.put('/users/:id', (req, res) => {
const { id } = req.params;
res.json({ id, ...req.body });
});
app.delete('/users/:id', (req, res) => {
res.json({ message: 'Deleted' });
});
// Route parameters
app.get('/users/:id', (req, res) => {
const { id } = req.params;
res.json({ id });
});
// Query parameters
app.get('/search', (req, res) => {
const { q, limit } = req.query;
res.json({ query: q, limit });
});
// Route groups with router
const userRouter = express.Router();
userRouter.get('/', (req, res) => {
res.json({ users: [] });
});
userRouter.get('/:id', (req, res) => {
res.json({ id: req.params.id });
});
app.use('/api/users', userRouter);
// Custom middleware
function requestLogger(req, res, next) {
console.log(`${req.method} ${req.path}`);
next();
}
app.use(requestLogger);
// Middleware with error handling
function authenticate(req, res, next) {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).json({ error: 'No token' });
}
req.user = { id: 1 }; // Verify token...
next();
}
app.get('/protected', authenticate, (req, res) => {
res.json({ message: 'Protected', user: req.user });
});
// Conditional middleware
app.get('/admin', authenticate, (req, res) => {
// Only runs if authenticate passes
});
// Route not found
app.use((req, res) => {
res.status(404).json({ error: 'Not found' });
});
// Error middleware (must have 4 parameters!)
app.use((error, req, res, next) => {
console.error(error);
res.status(error.status || 500).json({
error: error.message
});
});
// Usage
app.get('/divide', (req, res, next) => {
try {
const { a, b } = req.query;
if (b === 0) {
throw new Error('Division by zero');
}
res.json({ result: a / b });
} catch (error) {
next(error); // Pass to error middleware
}
});
// Request
app.post('/users', (req, res) => {
const { name, email } = req.body;
const contentType = req.get('content-type');
const userAgent = req.get('user-agent');
console.log(req.method); // POST
console.log(req.path); // /users
console.log(req.headers); // All headers
console.log(req.params); // URL parameters
console.log(req.query); // Query string
console.log(req.body); // Parsed body
});
// Response
app.get('/users', (req, res) => {
res.status(200); // Status code
res.json({ users: [] }); // Send JSON
// Alternative response methods
// res.send('Text response');
// res.sendFile('/path/to/file');
// res.redirect('/other-route');
// res.cookie('name', 'value');
// res.set('Custom-Header', 'value');
});
const { body, validationResult } = require('express-validator');
app.post('/users',
body('email').isEmail(),
body('password').isLength({ min: 8 }),
body('name').trim().notEmpty(),
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
// Process validated data
res.json({ message: 'User created' });
}
);
// Serve static files
app.use(express.static('public'));
app.use('/files', express.static('uploads'));
// Template engines
app.set('view engine', 'ejs');
app.set('views', './views');
app.get('/page', (req, res) => {
res.render('index', { title: 'Home', user: 'John' });
// Renders views/index.ejs
});
// Async/await in routes
app.get('/users/:id', async (req, res, next) => {
try {
const user = await User.findById(req.params.id);
if (!user) {
return res.status(404).json({ error: 'Not found' });
}
res.json(user);
} catch (error) {
next(error);
}
});
// Request timeout
app.use((req, res, next) => {
req.setTimeout(30000); // 30 seconds
next();
});
// Compression
const compression = require('compression');
app.use(compression());
// CORS
const cors = require('cors');
app.use(cors());
// Rate limiting
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 100 });
app.use(limiter);