Express.js Framework

What is Express.js?

Express.js is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications. It’s the most popular Node.js framework.

Basic Setup

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

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

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

Routing

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

// 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: `User ${req.params.id} updated` });
});

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

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

// Query parameters
app.get('/search', (req, res) => {
  const { q, page } = req.query;
  res.json({ query: q, page });
});

Middleware

// Application-level middleware
app.use((req, res, next) => {
  console.log('Time:', Date.now());
  next();
});

// Built-in middleware
app.use(express.json()); // Parse JSON bodies
app.use(express.urlencoded({ extended: true })); // Parse URL-encoded bodies
app.use(express.static('public')); // Serve static files

// Third-party middleware
const cors = require('cors');
app.use(cors());

const morgan = require('morgan');
app.use(morgan('dev'));

Request and Response

app.get('/api/data', (req, res) => {
  // Request properties
  console.log(req.method); // GET
  console.log(req.url); // /api/data
  console.log(req.headers);
  console.log(req.body);
  console.log(req.params);
  console.log(req.query);
  
  // Response methods
  res.send('Text response');
  res.json({ data: 'value' });
  res.status(404).send('Not found');
  res.redirect('/other-page');
  res.download('file.pdf');
  res.sendFile('/path/to/file.html');
});

Router

// users.routes.js
const express = require('express');
const router = express.Router();

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

router.post('/', (req, res) => {
  res.status(201).json({ message: 'Created' });
});

module.exports = router;

// app.js
const userRoutes = require('./routes/users.routes');
app.use('/api/users', userRoutes);

Error Handling

// Error handling middleware
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).json({ error: err.message });
});

// Async error handling
app.get('/async', async (req, res, next) => {
  try {
    const data = await fetchData();
    res.json(data);
  } catch (err) {
    next(err);
  }
});

Template Engines

// EJS
app.set('view engine', 'ejs');
app.get('/', (req, res) => {
  res.render('index', { title: 'Home' });
});

// Pug
app.set('view engine', 'pug');
app.get('/', (req, res) => {
  res.render('index', { title: 'Home' });
});

Complete Example

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

// Middleware
app.use(express.json());
app.use(express.static('public'));

// Routes
app.get('/', (req, res) => {
  res.send('Home Page');
});

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

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

// Error handling
app.use((err, req, res, next) => {
  res.status(500).json({ error: err.message });
});

// Start server
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

Interview Tips

  • Explain Express purpose: Web framework for Node.js
  • Show routing: Different HTTP methods
  • Demonstrate middleware: Request/response processing
  • Discuss error handling: Error middleware
  • Mention features: Routing, middleware, templating

Summary

Express.js is a minimal Node.js web framework providing routing, middleware, and HTTP utilities. Use app.get/post/put/delete for routes, app.use for middleware, and error handling middleware for errors. Popular for building REST APIs and web applications.

Test Your Knowledge

Take a quick quiz to test your understanding of this topic.

Test Your Node.js Knowledge

Ready to put your skills to the test? Take our interactive Node.js quiz and get instant feedback on your answers.