
Building REST API with Express.js and MongoDB
- 4 min
- July 5, 2025
- 28 views
- Backend & Database
REST APIs (Representational State Transfer) are a popular way to expose backend data to frontend applications. Using Express.js, a lightweight Node.js framework, and MongoDB, a NoSQL database, we can build a scalable, efficient backend service.
mkdir rest-api && cd rest-api
npm init -y
npm install express mongoose dotenv
rest-api/
|-- controllers/
|-- models/
|-- routes/
|-- .env
|-- server.js
|-- config/
const express = require('express');
const mongoose = require('mongoose');
const dotenv = require('dotenv');
const userRoutes = require('./routes/userRoutes');
dotenv.config();
const app = express();
// Middleware
app.use(express.json());
// Routes
app.use('/api/users', userRoutes);
// Connect to MongoDB
mongoose.connect(process.env.MONGO_URI)
.then(() => console.log("MongoDB connected"))
.catch(err => console.log(err));
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
age: Number
}, { timestamps: true });
module.exports = mongoose.model('User', userSchema);
const User = require('../models/User');
// GET all users
exports.getUsers = async (req, res) => {
const users = await User.find();
res.json(users);
};
// POST create new user
exports.createUser = async (req, res) => {
const newUser = new User(req.body);
await newUser.save();
res.status(201).json(newUser);
};
// GET user by ID
exports.getUserById = async (req, res) => {
const user = await User.findById(req.params.id);
user ? res.json(user) : res.status(404).json({ message: 'User not found' });
};
// PUT update user
exports.updateUser = async (req, res) => {
const user = await User.findByIdAndUpdate(req.params.id, req.body, { new: true });
user ? res.json(user) : res.status(404).json({ message: 'User not found' });
};
// DELETE user
exports.deleteUser = async (req, res) => {
const user = await User.findByIdAndDelete(req.params.id);
user ? res.json({ message: 'User deleted' }) : res.status(404).json({ message: 'User not found' });
};
Routes (routes/userRoutes.js)
const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');
router.get('/', userController.getUsers);
router.post('/', userController.createUser);
router.get('/:id', userController.getUserById);
router.put('/:id', userController.updateUser);
router.delete('/:id', userController.deleteUser);
module.exports = router;
.env File Examples
PORT=5000
MONGO_URI=mongodb://localhost:27017/myrestapi
Running the Server
Add this script to package.json:
"scripts": {
"dev": "nodemon server.js"
}
Then start the server:
npm run dev
Get all users
Method: GET
Endpoints: /api/users
Get user by id
Method: GET
Endpoints: /api/users/:id
Create a user
Method: POST
Endpoints: /api/users
Update user by id
Method: PUT
Endpoints: /api/users/:id
Delete user by id
Method: DELETE
Endpoints: /api/users/:id
you can test the API using tools like:
With Express.js and MongoDB, building a REST API becomes straightforward and efficient. You can easily extend this foundation to include: