How To Use MERN Stack: A Complete Guide
Last Updated :
23 Jul, 2025
The MERN stack, comprising MongoDB, ExpressJS, ReactJS, and NodeJS, is a powerful framework for building modern web applications. MongoDB offers a scalable NoSQL database, ExpressJS simplifies server-side development, ReactJS creates dynamic user interfaces, and NodeJS enables server-side JavaScript execution. In this article, we will see how To Use MERN Stack: A Complete Guide.
What is MERN Stack?
MERN is for MongoDB, ExpressJS, ReactJS, & NodeJS. It is an integrated technology for modern web applications.
- MongoDB: A NoSQL database that stores data in JSON-like documents. It’s flexible and scalable, perfect for handling more amounts of data.
- ExpressJS: A web application framework for Node.Js. It simplifies the process of constructing internet programs and APIs with the aid of providing a strong set of functions.
- ReactJS: A JavaScript library for constructing consumer interfaces. It permits builders to create reusable UI additives and build interactive web programs correctly.
- NodeJS: A JavaScript runtime surroundings that authorises you to run JavaScript code out of the doors of an internet browser.
Installing the MERN Stack
- NodeJS installation: Click to the Node.js website and download the installer for your own operating system. Follow the installation instructions to install in your device.
- Installing MongoDB: MongoDB provides installation for various operating systems on its network. Download and install MongoDB Community Edition.
- Create a New Project Directory: Open your terminal or command prompt or create a new directory on your MERN stack project.
- Initialize Your Project: Inside your project directory, initialize a new Node.js project by working npm init -y. This will create a package.json file.
- Install Dependencies: Install the necessary dependencies for your project:
npm install express mongoose
Building backend (Node.js + Express.js + MongoDB)
1. Initialize the node application
npm init -y
2. Configure Your Server: Create a new file called server.js, and import Express.js.
const express = require('express');
const app = express();
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
3. Connect to MongoDB: Install the mongoose package and connect your Express.js application to MongoDB.
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_database',
{ useNewUrlParser: true, useUnifiedTopology: true });
3. Create API Endpoints: Define routes to handle HTTP requests. To create a simple API endpoint for fetch data.
app.get('/api/data', (req, res) => {
// Fetch data from MongoDB
res.json({ message: 'Data fetched successfully' });
});
Building the Frontend (React.js)
1. Create React App: Run the following command in your terminal to create a new React.js app inside your project directory:
npx create-react-app client
2. Proxy setting: Open the package.json file inside, the client directory and add a proxy to forward API requests to Express.js server.
"proxy": "http://localhost:5000"
3. Fetch Data from Backend: Inside your React components, use the fetch API or libraries like axios to fetch data from your Express.js backend.
fetch('/api/data')
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
Putting It All Together
- Deploy your application: Start your Express.js server by running node server.js in a terminal window. Now, go to the client directory and run "npm start" to start the React development server.
- Build your application: Once you are ready to deploy your application, run "npm run build" from the client directory and create the React app. This will have your React app ready to be built in the build folder.
- Deploy your application: You can deploy your MERN stack application to platforms such as Heroku, AWS, or DigitalOcean. Be sure to configure your deployment environment correctly, including setting environment variables for important information.
You have now developed a full stack web application using the MERN stack. Keep exploring and experimenting to create even more powerful and robust applications.
Step 1: Setup and Installation
1. Install Node.js and MongoDB
Ensure you have Node.js and MongoDB installed on your machine. You can download them from their official websites.
2. Create Project Directory
mkdir mern-todo-app
cd mern-todo-app
Step 2: Initialize the Backend (Express & MongoDB)
1. Initialize a Node.js Project
npm init -y
2. Install Dependencies
npm install express mongoose cors body-parser
3. Create Folder Structure
mkdir backend
cd backend
mkdir models routes
touch server.js
4. Create server.js
JavaScript
const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
// Initialize express app
const app = express();
const PORT = process.env.PORT || 5000;
// Middleware
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// MongoDB connection URI
const uri = 'add_your_mongoDB-URI';
// Connect to MongoDB
mongoose.connect(uri, {
useNewUrlParser: true,
useUnifiedTopology: true,
serverSelectionTimeoutMS: 5000,
}).catch(err => console.error(err));
// Check connection
const connection = mongoose.connection;
connection.once('open', () => {
console.log('MongoDB database connection established successfully');
}).on('error', (error) => {
console.error('MongoDB connection error:', error);
});
// Mongoose Todo model
const todoSchema = new mongoose.Schema({
title: { type: String, required: true },
completed: { type: Boolean, default: false },
}, { timestamps: true });
const Todo = mongoose.model('Todo', todoSchema);
// Routes
app.get('/todos', (req, res) => {
Todo.find()
.then(todos => res.json(todos))
.catch(err => res.status(400).json('Error: ' + err));
});
app.post('/todos/add', (req, res) => {
const newTodo = new Todo({
title: req.body.title,
});
newTodo.save()
.then(() => res.json('Todo added!'))
.catch(err => res.status(400).json('Error: ' + err));
});
// Start server
app.listen(PORT, () => {
console.log(`Server running on http://localhost:${PORT}`);
});
Note: Make sure that it has your mongodb credentials like urls and password, So that it will connect to the mongodb. Also include your IP address in your mongodb collection, otherwise it won't access your data.
5. Create a Mongoose Model (models/Todo.js)
JavaScript
const mongoose = require('mongoose');
const TodoSchema = new mongoose.Schema({
task: String,
completed: {
type: Boolean,
default: false
}
});
module.exports = mongoose.model('Todo', TodoSchema);
6. Create Routes (routes/todoRoutes.js)
JavaScript
const express = require('express');
const router = express.Router();
const Todo = require('../models/Todo');
// Get all todos
router.get('/', async (req, res) => {
const todos = await Todo.find();
res.json(todos);
});
// Create a new todo
router.post('/', async (req, res) => {
const newTodo = new Todo({
task: req.body.task
});
await newTodo.save();
res.json(newTodo);
});
// Update a todo
router.put('/:id', async (req, res) => {
const updatedTodo = await Todo.findByIdAndUpdate
(req.params.id, req.body, { new: true });
res.json(updatedTodo);
});
// Delete a todo
router.delete('/:id', async (req, res) => {
await Todo.findByIdAndDelete(req.params.id);
res.json({ message: 'Todo deleted' });
});
module.exports = router;
Step 3: Initialize the Frontend (React)
1. Create React App
npx create-react-app frontend
cd frontend
2. Install Dependencies
npm install axios
3. Folder Structure
Create the following folders and files in src:
cd src
mkdir components
touch components/Todo.js
touch components/TodoList.js
touch components/AddTodo.js
touch App.css
4. Create Components
JavaScript
//AddTodo.js
import React, { useState } from 'react';
import axios from 'axios';
const AddTodo = ({ addTodo }) => {
const [title, setTask] = useState('');
const handleSubmit = async (e) => {
e.preventDefault();
if (title) {
const response = await axios.post('http://localhost:5000/todos/add', { title });
addTodo(response.data);
setTask('');
}
};
return (
<form onSubmit={handleSubmit}>
<input
type="text"
value={title}
onChange={(e) => setTask(e.target.value)}
placeholder="Add new task"
/>
<button type="submit">Add</button>
</form>
);
};
export default AddTodo;
JavaScript
//Todo.js
import React from 'react';
import './Todo.css';
function Todo({ todo, removeTodo, updateTodo }) {
const handleRemove = () => {
removeTodo(todo._id);
};
const toggleCompleted = () => {
updateTodo({ ...todo, completed: !todo.completed });
};
return (
<div className={`todo-item ${todo.completed ? 'completed' : ''}`}>
<span onClick={toggleCompleted} className="todo-text">
{todo.title}
</span>
<button onClick={handleRemove} className="todo-remove-button">
Remove
</button>
</div>
);
}
export default Todo;
JavaScript
//TodoList.js
import React, { useEffect, useState } from 'react';
import axios from 'axios';
import Todo from './Todo';
import AddTodo from './AddTodo';
import './TodoList.css';
const TodoList = () => {
const [todos, setTodos] = useState([]);
useEffect(() => {
const fetchTodos = async () => {
const response = await axios.get('http://localhost:5000/todos');
setTodos(response.data);
};
fetchTodos();
}, []);
const addTodo = (todo) => {
setTodos([...todos, todo]);
};
const removeTodo = (id) => {
setTodos(todos.filter(todo => todo._id !== id));
};
const updateTodo = (updatedTodo) => {
setTodos(todos.map(todo => (todo._id === updatedTodo._id ? updatedTodo : todo)));
};
return (
<div className="todo-list-container">
<h1 className="todo-list-title">To-Do List</h1>
<AddTodo addTodo={addTodo} />
<div className="todos">
{todos.map(todo => (
<Todo key={todo._id} todo={todo}
removeTodo={removeTodo} updateTodo={updateTodo} />
))}
</div>
</div>
);
};
export default TodoList;
JavaScript
//App.js
import React from 'react';
import './App.css';
import TodoList from './components/TodoList';
function App() {
return (
<div className="App">
<TodoList />
</div>
);
}
export default App;
Step 4: Add Some CSS to give good look.
CSS
/* Todo.css */
.todo-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px;
margin-bottom: 10px;
background-color: #fff;
border-radius: 4px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
transition: background-color 0.3s;
}
.todo-item.completed {
background-color: #e0ffe0;
text-decoration: line-through;
}
.todo-text {
flex-grow: 1;
cursor: pointer;
}
.todo-remove-button {
background-color: #ff4d4d;
color: white;
border: none;
padding: 5px 10px;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s;
}
.todo-remove-button:hover {
background-color: #cc0000;
}
CSS
/* App.css */
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
CSS
/* TodoList.css */
.todo-list-container {
max-width: 600px;
margin: 50px auto;
padding: 20px;
background-color: #f1f1f1;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
.todo-list-title {
text-align: center;
color: #333;
margin-bottom: 20px;
font-size: 2em;
}
.todos {
margin-top: 20px;
}
Step 5: Run the Application
1. Start MongoDB
Ensure your MongoDB server is running:
mongod
2. Start Backend Server
In the backend directory:
node server.js
3. Start React Frontend
In the frontend directory:
npm start
Folder Structure Overview
For Front End :-
Front End StructureFor Back End :-
Backend StructureDependencies
"dependencies": {
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"axios": "^1.7.2",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-scripts": "5.0.1",
"web-vitals": "^2.1.4"
},
Output
How To Use MERN Stack: A Complete GuideConclusion
By following this guide, you have built a full-stack web application using the MERN stack. You've learned to install Node.js and MongoDB, set up the backend with Express.js, connect to MongoDB using Mongoose, and create a dynamic frontend with React.js. With your application now deployed, you have a robust foundation for further development and optimization. The MERN stack offers a streamlined, efficient approach to building powerful web applications. Continue exploring and enhancing your skills to make the most of this versatile technology stack.
Similar Reads
MERN Stack The MERN stack is a widely adopted full-stack development framework that simplifies the creation of modern web applications. Using JavaScript for both the frontend and backend enables developers to efficiently build robust, scalable, and dynamic applications.What is MERN Stack?MERN Stack is a JavaSc
9 min read
MERN Full Form MERN Stack is a JavaScript Stack that is used for easier and faster deployment of full-stack web applications. The full form of MERN includes four powerful technologies:MongoDBExpress.jsReact.jsNode.jsThese technologies together provide a full-stack JavaScript framework for developing modern, dynami
2 min read
How to Become a MERN Stack Developer? Do you also get amazed at those beautiful websites that appear in front of you? Those are designed by none other than Full-Stack Developers Or MERN stack developers. They are software developers who specialize in building web applications using the MERN stack, which is a popular set of technologies
6 min read
Difference between MEAN Stack and MERN Stack Web development is a procedure or process for developing a website. A website basically contains three ends: the client side, the server side, and the database. These three are different sides of an application that combine together to deliver an application; all ends are implemented separately with
3 min read
Best Hosting Platforms for MERN Projects Hosting your website grants you the thrilling opportunity to showcase it to the world. Whether you choose free or paid hosting, the process of deploying your website fills you with a mix of excitement, pride, and nervousness. You eagerly await user feedback, enthusiastically embracing the chance to
5 min read
Getting Started with React & Frontend
React IntroductionReactJS is a component-based JavaScript library used to build dynamic and interactive user interfaces. It simplifies the creation of single-page applications (SPAs) with a focus on performance and maintainability. "Hello, World!" Program in ReactJavaScriptimport React from 'react'; function App() {
6 min read
React Environment SetupTo run any React application, we need to first setup a ReactJS Development Environment. In this article, we will show you a step-by-step guide to installing and configuring a working React development environment.Pre-requisite:We must have Nodejs installed on our PC. So, the very first step will be
3 min read
React ComponentsIn React, components are reusable, independent blocks that define the structure and behavior of the UI. They accept inputs (props) and return elements that describe what should appear on the screen.Key Concepts of React Components:Each component handles its own logic and UI rendering.Components can
4 min read
ReactJS Props - Set 1The react props refer to properties in react that are passed down from parent component to child to render the dynamic content.Till now we have worked with components using static data only. In this article, we will learn about react props and how we can pass information to a Component.What are Prop
5 min read
ReactJS StateIn React, the state refers to an object that holds information about a component's current situation. This information can change over time, typically as a result of user actions or data fetching, and when state changes, React re-renders the component to reflect the updated UI. Whenever state change
3 min read
React FormsForms are an essential part of any application used for collecting user data, processing payments, or handling authentication. React Forms are the components used to collect and manage the user inputs. These components include the input elements like text field, check box, date input, dropdowns etc.
5 min read
React ListsIn lists, React makes it easier to render multiple elements dynamically from arrays or objects, ensuring efficient and reusable code. Since nearly 85% of React projects involve displaying data collectionsâlike user profiles, product catalogs, or tasksâunderstanding how to work with lists.To render a
4 min read
Create ToDo App using ReactJSThis to-do list allows users to add new tasks and delete them by clicking the corresponding button. The logic is handled by a click event handler whenever the user clicks on a task it gets deleted from the list.Lets have a quick look at what the final application will look like:ToDo App using ReactJ
3 min read
Redux Setup and basics
Introduction to Redux (Action, Reducers and Store)Redux is a state managing library used in JavaScript apps. It simply manages the state of your application or in other words, it is used to manage the data of the application. It is used with a library like React.Uses: It makes easier to manage state and data. As the complexity of our application in
4 min read
Redux and The Flux ArchitectureFlux Architecture: Flux is AN architecture that Facebook uses internally when operating with React. It is not a framework or a library. It is merely a replacement quite an architecture that enhances React and also the idea of unidirectional data flow. Redux is a predictable state container for JavaS
5 min read
React Redux Hooks: useSelector and useDispatch.State management is a major aspect of building React applications, allowing users to maintain and update application state predictably. With the introduction of React Hooks, managing state has become even more streamlined and efficient. Among the most commonly used hooks for state management in Reac
4 min read
What are Action's creators in React Redux?In React Redux, action creators are functions that create and return action objects. An action object is a plain JavaScript object that describes a change that should be made to the application's state. Action creators help organize and centralize the logic for creating these action objects.Action C
4 min read
What is Redux Thunk?Redux Thunk is like a co-worker for Redux, giving it the power to handle asynchronous actions. It's that extra tool that allows your Redux store to deal with things like fetching data from a server or performing tasks that take some time. With Redux Thunk, your app can smoothly manage both synchrono
3 min read
Creating custom middlewares in React ReduxIn React-Redux applications, managing the flow of data is crucial for building efficient and scalable apps. Redux provides a powerful state management solution, and custom middleware adds an extra layer of flexibility to handle complex scenarios effectively. Let's understand custom middleware in sim
5 min read
Common middleware libraries used in ReduxMiddleware libraries play a crucial role in Redux applications, enabling users to extend and enhance Redux's capabilities. The middleware libraries offer a wide range of capabilities and cater to different use cases and preferences. users can choose the middleware that best fits their requirements a
5 min read
Express and Mongo Setup
Mongo with Express TutorialMongoDB and ExpressJS are a powerful pair for web development. MongoDB provides flexible data storage, while ExpressJS simplifies server-side logic. Together, they make it easy to create modern web applications efficiently. MongoDB's document-based approach and ExpressJS's streamlined backend develo
5 min read
How to Install MongoDB on Windows?Looking to install MongoDB on your Windows machine? This detailed guide will help you install MongoDB on Windows (Windows Server 2022, 2019, and Windows 11) quickly and efficiently. Whether you are a developer or a beginner, follow this guide for seamless MongoDB installation, including setting up e
6 min read
How to Install Express in a Node Project?ExpressJS is a popular, lightweight web framework for NodeJS that simplifies the process of building web applications and APIs. It provides a robust set of features for creating server-side applications, including routing, middleware support, and easy integration with databases and other services.Be
2 min read
Mongoose Module IntroductionMongoose is a popular Object Data Modeling (ODM) library for MongoDB and Node.js. It provides a straightforward and structured way to interact with MongoDB, allowing you to define schemas for your collections, apply constraints, and validate data before storing it in the database. In this guide, we'
5 min read
Mongoose ConnectionsA Mongoose connection is a Node.js module that establishes and manages connections between a Node.js application and a MongoDB database. It optimizes resource utilization, handles connection pooling, and manages errors, facilitating efficient data operations.What is Mongoose Connection?A Mongoose co
6 min read
How to Connect MongoDB with a Node.js Application using MongooseJSMongoose is a powerful MongoDB object modeling library for Node.js enabling you to easily interact between your Node.js app and MongoDB. In this article we are going to explore how you can connect your Node.js app to MongoDB using MongooseJS. You will learn how to create a connection, specify schema
4 min read
Node.js CRUD Operations Using Mongoose and MongoDB AtlasCRUD (Create, Read, Update, Delete) operations are fundamental in web applications for managing data. Mongoose simplifies interaction with MongoDB, offering a schema-based approach to model data efficiently. MongoDB Atlas is a fully managed cloud database that simplifies the process of setting up, m
8 min read
Signup Form Using Node.js and MongoDBInstallations First, we need to include a few packages for our Nodejs application. npm install express --save Express allows us to set up middlewares to respond to HTTP Requests. npm install body-parser --save If you want to read HTTP POST data , you have to use the "body-parser" node module. npm in
3 min read
API Routing and Authentication
Postman- Backend Testing
Introduction to Postman for API DevelopmentPostman: Postman is an API(application programming interface) development tool that helps to build, test and modify APIs. Almost any functionality that could be needed by any developer is encapsulated in this tool. It is used by over 5 million developers every month to make their API development eas
7 min read
Basics of API Testing Using PostmanAPIs(Application Programming Interfaces) are very commonly used in development. Postman is a tool that can be used for API Testing. In this article, we will learn how to do simple API Testing using Postman. Go to your workspace in Postman.Click on the + symbol to open a new tab.Enter the API Endpoin
2 min read
How to use postman for testing express applicationTesting an Express app is very important to ensure its capability and reliability in different use cases. There are many options available like Thunder client, PAW, etc but we will use Postman here for the testing of the Express application. It provides a great user interface and numerous tools whic
3 min read
How to send different types of requests (GET, POST, PUT, DELETE) in Postman.In this article, we are going to learn how can we send different types of requests like GET, POST, PUT, and DELETE in the Postman. Postman is a popular API testing tool that is used to simplify the process of developing and testing APIs (Application Programming Interface). API acts as a bridge betwe
5 min read
How to test GET Method of express with Postman ?The GET method is mainly used on the client side to send a request to a specified server to get certain data or resources. By using this GET method we can only access data but can't change it, we are not allowed to edit or completely change the data. It is widely one of the most used methods. In thi
2 min read
How to test POST Method of Express with Postman?The POST method is a crucial aspect of web development, allowing clients to send data to the server for processing. In the context of Express, a popular web framework for Node, using the POST method involves setting up routes to handle incoming data. In this article, we'll explore how to test the PO
2 min read
How to test DELETE Method of Express with Postman ?The DELETE method is an essential part of RESTful web services used to remove specific resources from a server. Whether you are building a simple API or a complex web application, knowing how to use this method effectively is key. Here, we will explore how to Implement the DELETE method in Express.j
3 min read
How to create and write tests for API requests in Postman?Postman is an API(utility programming interface) development device that enables to construct, take a look at and alter APIs. It could make numerous varieties of HTTP requests(GET, POST, PUT, PATCH), store environments for later use, and convert the API to code for various languages(like JavaScript,
3 min read