Node.js Interview Practice Questions with Solutions

Introduction

Node.js interviews test more than definitions. Interviewers often check whether you understand how Node.js works and whether you can apply concepts while solving practical problems. This chapter contains 10 solved Node.js interview practice questions covering the runtime, modules, asynchronous programming, Express.js, APIs, errors, databases, authentication, and performance. Each answer is explained in simple language so beginners can understand the concept and prepare confidently for technical interviews. Node.js Interview practice questions with solutions help to understand the concepts.

Question 1: What is Node.js, and why is it used?

Answer

Node.js is a JavaScript runtime that allows developers to execute JavaScript outside a web browser.

It is commonly used to build:

  • Backend applications
  • REST APIs
  • Web servers
  • Real-time applications
  • Authentication systems
  • Microservices
  • Command-line tools
  • File-processing applications

A simple Node.js program is:

console.log(
    "Hello from Node.js"
);

Run it using:

node app.js

Step-by-Step Explanation

Normally, JavaScript is commonly associated with browsers.

Node.js allows JavaScript to run on a server or computer.

For example:

JavaScript
     ↓
Node.js Runtime
     ↓
Server-side Application

Interview Answer

A good short interview answer is:

Node.js is a JavaScript runtime built on the V8 engine that allows JavaScript to run outside the browser. It is commonly used for APIs, web servers, real-time applications, and backend services.

Important Point

Node.js is not a programming language. JavaScript is the programming language, while Node.js is the runtime environment.


Question 2: What is the difference between synchronous and asynchronous code in Node.js?

Answer

Synchronous code executes one operation and waits for it to finish before continuing.

Asynchronous code can start an operation and allow other work to continue while waiting for the result.

Synchronous Example

const fs =
    require("fs");

console.log(
    "1. Start"
);

const data =
    fs.readFileSync(
        "data.txt",
        "utf8"
    );

console.log(
    "2. File loaded"
);

console.log(
    "3. End"
);

The operations execute in order.

Asynchronous Example

const fs =
    require("fs");

console.log(
    "1. Start"
);

fs.readFile(
    "data.txt",
    "utf8",
    (error, data) => {

        if (error) {

            console.error(
                error
            );

            return;

        }

        console.log(
            "2. File loaded"
        );

    }
);

console.log(
    "3. End"
);

The program can continue while the file operation is being completed.

Output

Typically:

1. Start
3. End
2. File loaded

Step-by-Step Explanation

Synchronous:

Start
  ↓
Wait for file
  ↓
File complete
  ↓
Continue

Asynchronous:

Start
  ↓
Start file operation
  ↓
Continue other JavaScript
  ↓
File finishes
  ↓
Callback runs

Important Point

Asynchronous programming is one of the most important concepts to understand when learning Node.js.


Question 3: What is the Event Loop in Node.js?

Answer

The Event Loop is a core mechanism that allows Node.js to handle asynchronous operations without blocking the main JavaScript execution flow.

Consider:

console.log(
    "Start"
);

setTimeout(
    () => {

        console.log(
            "Timer"
        );

    },
    0
);

console.log(
    "End"
);

Output

Start
End
Timer

Why?

The timer callback does not execute immediately.

The main JavaScript code continues first:

Start
↓
Schedule timer
↓
End
↓
Timer callback

Simple Mental Model

JavaScript Code
       ↓
    Call Stack
       ↓
Async Operations
       ↓
   Event Loop
       ↓
Callback / Promise
       ↓
    Call Stack

Interview Answer

The Event Loop allows Node.js to handle asynchronous operations efficiently by coordinating callbacks and other asynchronous work while JavaScript executes on its main thread.

Important Point

Do not say that the Event Loop “makes all Node.js code run on multiple threads.” That is an oversimplification. Node.js uses a JavaScript execution thread plus other system mechanisms and a worker pool for certain operations.


Question 4: What is the difference between require() and import in Node.js?

Answer

Both can be used to work with modules, but they belong to different module systems.

CommonJS

const fs =
    require("fs");

Export:

module.exports = {
    add
};

ES Modules

import fs from "fs";

Export:

export function add(
    a,
    b
) {

    return a + b;

}

CommonJS Example

math.js:

function add(
    a,
    b
) {

    return a + b;

}

module.exports = {
    add
};

app.js:

const math =
    require("./math");

console.log(
    math.add(
        10,
        20
    )
);

Output

30

ES Module Example

math.mjs:

export function add(
    a,
    b
) {

    return a + b;

}

app.mjs:

import {
    add
} from "./math.mjs";

console.log(
    add(
        10,
        20
    )
);

Important Point

Node.js supports both CommonJS and ES Modules. Your project configuration and file/module format determine how imports and exports are interpreted.


Question 5: What are callbacks, Promises, and async/await?

Answer

These are different ways of handling asynchronous operations.

Callback Example

function getUser(
    callback
) {

    setTimeout(
        () => {

            callback(
                null,
                {
                    id: 1,
                    name: "Rahul"
                }
            );

        },
        1000
    );

}

getUser(
    (error, user) => {

        if (error) {

            console.error(
                error
            );

            return;

        }

        console.log(
            user
        );

    }
);

Promise Example

function getUser() {

    return new Promise(
        (resolve) => {

            setTimeout(
                () => {

                    resolve({
                        id: 1,
                        name: "Rahul"
                    });

                },
                1000
            );

        }
    );

}

getUser()
    .then(
        user => {

            console.log(
                user
            );

        }
    );

async/await Example

async function showUser() {

    const user =
        await getUser();

    console.log(
        user
    );

}

showUser();

Comparison

Callbacks
    ↓
Promises
    ↓
async/await

This is not a strict replacement chain, but async/await provides a cleaner syntax for working with promises.

Important Point

async/await does not make an operation synchronous. It provides a more readable way to write promise-based asynchronous code.


Question 6: How do you create a simple REST API in Node.js?

Answer

You can use Express.js to create a REST API.

Install Express:

npm init -y
npm install express

Create app.js:

const express =
    require("express");

const app =
    express();

app.use(
    express.json()
);


const users = [

    {
        id: 1,
        name: "Rahul"
    },

    {
        id: 2,
        name: "Priya"
    }

];


app.get(
    "/api/users",
    (req, res) => {

        res.json({
            users: users
        });

    }
);


app.get(
    "/api/users/:id",
    (req, res) => {

        const id =
            Number(
                req.params.id
            );

        const user =
            users.find(
                item =>
                    item.id === id
            );

        if (!user) {

            return res.status(
                404
            ).json({

                message:
                    "User not found."

            });

        }

        res.json(
            user
        );

    }
);


app.listen(
    3000,
    () => {

        console.log(
            "Server running on port 3000"
        );

    }
);

Test

Open:

http://localhost:3000/api/users

Response

{
    "users": [
        {
            "id": 1,
            "name": "Rahul"
        },
        {
            "id": 2,
            "name": "Priya"
        }
    ]
}

Interview Explanation

The API contains:

GET /api/users

for all users and:

GET /api/users/:id

for one user.

Important Point

A REST API typically uses HTTP methods such as:

GET
POST
PUT
PATCH
DELETE

Question 7: How do you handle errors in an Express.js application?

Answer

Express supports centralized error-handling middleware.

Example:

const express =
    require("express");

const app =
    express();


app.get(
    "/api/test",
    (req, res, next) => {

        const error =
            new Error(
                "Something went wrong."
            );

        next(error);

    }
);


app.use(
    (
        error,
        req,
        res,
        next
    ) => {

        console.error(
            error
        );

        res.status(
            500
        ).json({

            success: false,

            message:
                "Internal server error."

        });

    }
);


app.listen(
    3000,
    () => {

        console.log(
            "Server running."
        );

    }
);

How It Works

The route creates an error:

const error =
    new Error(
        "Something went wrong."
    );

Then:

next(error);

passes the error to the error-handling middleware.

The error middleware has four parameters:

(
    error,
    req,
    res,
    next
)

Interview Answer

Express error-handling middleware centralizes error processing and normally uses four parameters: error, req, res, and next.

Important Point

Avoid sending internal stack traces or sensitive implementation details to users in production responses.


Question 8: How do you connect Node.js with MongoDB?

Answer

A common approach is to use the MongoDB Node.js driver or an ODM such as Mongoose.

For a beginner-friendly Mongoose example:

npm install mongoose

Then:

const mongoose =
    require("mongoose");

mongoose.connect(
    "mongodb://127.0.0.1:27017/school"
)
.then(
    () => {

        console.log(
            "MongoDB connected."
        );

    }
)
.catch(
    error => {

        console.error(
            "Database error:",
            error
        );

    }
);

Create a Model

const studentSchema =
    new mongoose.Schema({

        name: String,

        age: Number,

        course: String

    });


const Student =
    mongoose.model(
        "Student",
        studentSchema
    );

Create a Student

async function createStudent() {

    const student =
        await Student.create({

            name:
                "Rahul",

            age:
                20,

            course:
                "Node.js"

        });

    console.log(
        student
    );

}

createStudent();

Step-by-Step Flow

Node.js
   ↓
Mongoose
   ↓
MongoDB
   ↓
Database

Important Point

Never put production database credentials directly in source code. Use environment variables or a secure secrets-management approach.


Question 9: What is middleware in Express.js?

Answer

Middleware is a function that runs during the request-response process.

It can:

  • Log requests
  • Authenticate users
  • Validate input
  • Modify requests
  • Modify responses
  • Handle errors
  • Control access

Example

const express =
    require("express");

const app =
    express();


function logger(
    req,
    res,
    next
) {

    console.log(
        req.method,
        req.originalUrl
    );

    next();

}


app.use(
    logger
);


app.get(
    "/",
    (req, res) => {

        res.send(
            "Hello World"
        );

    }
);


app.listen(
    3000,
    () => {

        console.log(
            "Server running."
        );

    }
);

Request Flow

When the user visits:

GET /

the request moves through:

Request
   ↓
logger middleware
   ↓
Route
   ↓
Response

Why next()?

The next() function passes control to the next matching middleware or route handler.

Without it, the request may remain pending if the middleware does not send a response.

Interview Answer

Middleware is a function that has access to the request, response, and next function. It can perform tasks such as logging, authentication, validation, and error handling during the request-response lifecycle.


Question 10: How would you improve the performance and reliability of a Node.js API?

Answer

This is a common real-world interview question.

A good answer should cover multiple areas rather than naming only one optimization.

1. Avoid Blocking the Event Loop

Do not perform unnecessary CPU-heavy synchronous operations inside request handlers.

For example, avoid unnecessary:

fs.readFileSync()

inside high-traffic API routes.

Prefer asynchronous APIs where appropriate.

2. Use Database Indexes

If an API frequently searches by email:

email

an appropriate database index can significantly improve lookup performance.

3. Use Pagination

Instead of returning thousands of records:

GET /api/users

support:

GET /api/users?page=1&limit=20

4. Cache Appropriate Data

Frequently requested data can sometimes be cached to reduce database work.

5. Validate Input

Reject invalid requests early.

if (!email) {

    return res.status(
        400
    ).json({

        message:
            "Email is required."

    });

}

6. Add Authentication and Authorization

Do not allow every user to access every resource.

7. Use Rate Limiting

Rate limiting can help reduce abuse and excessive requests.

8. Handle Errors Properly

Use centralized error handling and meaningful logs.

9. Keep Secrets Secure

Use environment variables or a secrets manager for:

Database credentials
API keys
JWT secrets
Third-party credentials

10. Monitor the Application

Production systems benefit from:

  • Application logs
  • Error monitoring
  • Health checks
  • Metrics
  • Performance monitoring

Interview Answer

I would improve a Node.js API by avoiding event-loop blocking operations, optimizing database queries and indexes, using pagination and caching where appropriate, validating input, implementing authentication and rate limiting, handling errors centrally, securing configuration, and monitoring the application in production.

Important Point

Performance optimization should be based on actual bottlenecks. Do not optimize blindly.

Key Takeaways

1. Node.js is a JavaScript runtime

It allows JavaScript to run outside the browser.

2. Node.js is commonly used for backend development

It can be used to build:

  • APIs
  • Web servers
  • Real-time applications
  • Microservices
  • Backend services

3. Understand asynchronous programming

Callbacks, Promises, and async/await are fundamental Node.js concepts.

4. Learn the Event Loop

Understanding the Event Loop helps explain how Node.js handles asynchronous work.

5. Know CommonJS and ES Modules

Be comfortable with:

require()

and:

import

6. Express.js is widely used for APIs

Know how to create:

Routes
Middleware
Controllers
Error handlers

7. Know HTTP methods

Remember:

GET
POST
PUT
PATCH
DELETE

8. Learn HTTP status codes

Common codes include:

200 OK
201 Created
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
409 Conflict
500 Internal Server Error

9. Understand middleware

Middleware can handle:

  • Authentication
  • Logging
  • Validation
  • Errors
  • Request processing

10. Learn database integration

A Node.js developer should understand how applications communicate with databases.

11. Security matters

Do not expose:

  • Passwords
  • API keys
  • JWT secrets
  • Database credentials

12. Validation is essential

Never trust client-provided data.

13. Authentication and authorization are different

Authentication asks:

Who are you?

Authorization asks:

What can you access?

14. Know REST API fundamentals

Be able to explain resources, HTTP methods, status codes, request bodies, parameters, and JSON responses.

15. Learn debugging

Be comfortable with:

console.log()

and the Node.js debugger.

16. Understand error handling

Know how to handle:

  • Synchronous errors
  • Promise rejections
  • Express errors
  • Database errors
  • Validation errors

17. Think about production

Interviewers often want to know whether you can move beyond tutorial-level code.

Think about:

Security
Performance
Scalability
Monitoring
Logging
Testing
Deployment

18. Don’t memorize everything

Understand the concept and practice implementing it.

19. Explain your reasoning

In an interview, explain:

What you are doing
Why you are doing it
What could go wrong
How you would improve it

20. Practice coding questions

The best preparation is to combine theory with practical Node.js coding exercises.

FAQs

1. What are the most important Node.js interview topics?

Important topics include the Event Loop, asynchronous programming, callbacks, Promises, async/await, modules, Express.js, middleware, REST APIs, error handling, databases, authentication, streams, buffers, debugging, security, and performance.

2. Is Node.js difficult for beginners?

Node.js can be learned by beginners who already understand basic JavaScript. Start with modules and the file system, then learn asynchronous programming, Express.js, APIs, databases, authentication, and real-world projects step by step.

3. What JavaScript concepts should I know before learning Node.js?

You should understand variables, functions, objects, arrays, loops, conditions, scope, destructuring, modules, promises, callbacks, and async/await. A basic understanding of JavaScript ES6+ is especially helpful.

4. What is commonly asked in a Node.js interview?

Interviewers commonly ask about Node.js architecture, Event Loop, asynchronous programming, modules, Express middleware, REST APIs, error handling, databases, authentication, security, and practical coding problems.

5. What is the difference between Node.js and Express.js?

Node.js is the runtime environment that executes JavaScript outside the browser. Express.js is a web framework that runs on Node.js and provides features such as routing, middleware, and HTTP request/response handling.

6. Should I learn MongoDB before giving a Node.js interview?

You do not necessarily need MongoDB specifically for every Node.js interview, but database knowledge is valuable for backend roles. You should understand basic database operations and how Node.js communicates with a database.

7. How can I prepare for a Node.js interview as a beginner?

Start with JavaScript fundamentals, then learn Node.js core modules, asynchronous programming, Express.js, REST APIs, databases, authentication, error handling, and debugging. Build at least one complete backend project and practice explaining the code and design decisions.

Written by Shubhranshu Shekhar, who has trained 20000+ students in coding.

Scroll to Top