Essential Express.js Interview Questions: Top 20 with Examples and In-Depth Explanations

    1. What is Express.js, and why is it used?

    Answer:

    Express.js is a lightweight, fast, and flexible web application framework for Node.js. It provides a robust set of features to build single-page, multi-page, and hybrid web applications and APIs. It's widely used due to its minimalistic design and ease of use.

    Example:

    const express = require('express');
    const app = express();
    
    app.get('/', (req, res) => {
      res.send('Hello, Express!');
    });
    
    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
    

    2. What is middleware in Express.js?

    Answer:

    Middleware in Express.js functions between the request and response cycle. They can modify requests and responses or terminate the request-response cycle.

    Example:

    app.use((req, res, next) => {
      console.log('Middleware executed');
      next(); // Passes control to the next middleware/route handler
    });
    

    3. How do you handle different HTTP methods in Express.js?

    Answer:

    Express allows handling HTTP methods like GET, POST, PUT, DELETE, etc., using corresponding functions like app.get(), app.post(), etc.

    Example:

    app.get('/get', (req, res) => res.send('GET request'));
    app.post('/post', (req, res) => res.send('POST request'));
    app.put('/put', (req, res) => res.send('PUT request'));
    app.delete('/delete', (req, res) => res.send('DELETE request'));
    

    4. What is app.use() in Express.js?

    Answer:

    app.use() is a method to mount middleware at a specific path or globally for all routes. It's used for middleware functions that modify or handle requests and responses.

    Example:

    app.use(express.json()); // This parses incoming JSON requests and puts the parsed data in req.body
    

    5. What is routing in Express.js?

    Answer:

    Routing refers to how an application responds to client requests for a particular endpoint (path and method). It’s the core of any web framework like Express.js.

    Example:

    app.get('/user', (req, res) => {
      res.send('User route');
    });
    
    app.post('/user', (req, res) => {
      res.send('User POST route');
    });
    

    6. How do you serve static files in Express.js?

    Answer:

    Express can serve static files (like images, CSS, and JavaScript) using the built-in middleware express.static().

    Example:

    app.use(express.static('public'));
    // Access static files in the 'public' directory (e.g., localhost:3000/image.jpg)
    

    7. How do you handle query parameters in Express.js?

    Answer:

    Query parameters are part of the URL, and you can access them via req.query.

    Example:

    app.get('/search', (req, res) => {
      const query = req.query.q;
      res.send(`Search query: ${query}`);
    });
    // Example: localhost:3000/search?q=express
    

    8. How do you handle URL parameters in Express.js?

    Answer:

    URL parameters are dynamic parts of the URL. They can be accessed via req.params.

    Example:

    app.get('/user/:id', (req, res) => {
      const userId = req.params.id;
      res.send(`User ID: ${userId}`);
    });
    // Example: localhost:3000/user/123
    

    9. How do you handle form data in Express.js?

    Answer:

    To handle form data (usually submitted via POST), you need to use middleware to parse application/x-www-form-urlencoded data.

    Example:

    app.use(express.urlencoded({ extended: true }));
    
    app.post('/submit', (req, res) => {
      const { name, email } = req.body;
      res.send(`Name: ${name}, Email: ${email}`);
    });
    

    10. How do you redirect requests in Express.js?

    Answer:

    You can redirect the user to another route using res.redirect().

    Example:

    app.get('/old-route', (req, res) => {
      res.redirect('/new-route');
    });
    

    11. What is the difference between res.send() and res.json() in Express.js?

    Answer:

    • res.send() can send a response in various formats (HTML, JSON, text).
    • res.json() is used to send a JSON response explicitly.

    Example:

    app.get('/send', (req, res) => {
      res.send('This is a text response');
    });
    
    app.get('/json', (req, res) => {
      res.json({ message: 'This is a JSON response' });
    });
    

    12. How do you create and use a custom middleware in Express.js?

    Answer:

    You can create custom middleware by defining a function that takes req, res, and next as parameters.

    Example:

    const logMiddleware = (req, res, next) => {
      console.log(`Request to: ${req.url}`);
      next(); // Pass control to the next middleware
    };
    
    app.use(logMiddleware);
    

    13. How do you handle errors in Express.js?

    Answer:

    You can create error-handling middleware by adding a middleware function with four arguments: err, req, res, and next.

    Example:

    app.use((err, req, res, next) => {
      console.error(err.stack);
      res.status(500).send('Something went wrong!');
    });
    

    14. What are templates in Express.js, and how do you render them?

    Answer:

    Templates allow you to dynamically generate HTML. Express.js supports template engines like Pug, EJS, and Handlebars.

    Example (Pug template):

    1. Set the view engine:
    app.set('view engine', 'pug');
    
    1. Render the template:
    app.get('/template', (req, res) => {
      res.render('index', { title: 'Express', message: 'Hello, Express!' });
    });
    

    15. How do you structure an Express.js application for scalability?

    Answer:

    You can organize routes, middleware, and controllers in separate folders:

    1. routes/: Contains route definitions.
    2. controllers/: Handles business logic.
    3. models/: Defines database schemas.

    Example:

    - app.js
    - routes/
      - users.js
    - controllers/
      - userController.js
    - models/
      - userModel.js
    

    16. What is next() in Express.js? Why is it important?

    Answer:

    next() is a function that passes control to the next middleware in the stack. It’s crucial to avoid blocking the request-response cycle.

    Example:

    app.use((req, res, next) => {
      console.log('Middleware 1');
      next(); // Passes control to the next middleware
    });
    
    app.use((req, res) => {
      console.log('Middleware 2');
      res.send('Request complete');
    });
    

    17. How do you implement authentication in Express.js?

    Answer:

    Authentication can be implemented using libraries like passport.js or JWT (JSON Web Tokens).

    Example (JWT-based authentication):

    1. Install jsonwebtoken:
    npm install jsonwebtoken
    
    1. Create a token:
    const jwt = require('jsonwebtoken');
    const token = jwt.sign({ userId: user._id }, 'secretKey', { expiresIn: '1h' });
    
    1. Verify the token:
    const verifyToken = (req, res, next) => {
      const token = req.headers['authorization'];
      if (!token) return res.status(403).send('Token is required');
      jwt.verify(token, 'secretKey', (err, decoded) => {
        if (err) return res.status(401).send('Invalid Token');
        req.user = decoded;
        next();
      });
    };
    

    18. What is CORS in Express.js, and how do you enable it?

    Answer:

    CORS (Cross-Origin Resource Sharing) allows servers to control which origins can access the resources. It’s often required for APIs that are accessed from different domains.

    Example:

    const cors = require('cors');
    app.use(cors()); // Enables CORS for all routes
    

    19. How do you handle file uploads in Express.js?

    Answer:

    You can handle file uploads using the multer library.

    Example:

    1. Install multer:
    npm install multer
    
    1. Setup multer for file upload:
    const multer = require('multer');
    const upload = multer({ dest: 'uploads/' });
    
    app.post('/upload', upload.single('file'), (req, res) => {
      res.send('File uploaded');
    });
    

    20. How do you handle sessions in Express.js?

    Answer:

    Sessions allow storing user-specific data across requests. You can manage sessions using express-session.

    Example:

    1. Install express-session:
    npm install express-session
    
    1. Use session middleware:
    const session = require('express-session');
    app.use(session({ secret: 'secret', resave: false, saveUninitialized: true }));
    
    app.get('/', (req, res) => {
      if (!req.session.views) {
        req.session.views = 1;
      } else {
        req.session.views++;
      }
      res.send(`Views: ${req.session.views}`);
    });
    

    These questions cover a wide range of Express.js features and are commonly asked in interviews to evaluate your understanding and hands-on skills.