Tech TutorBangla Web Documentation
Portfolio
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • MongoDB Documentation21টি অধ্যায়
প্রযুক্তি নির্বাচন
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Introduction
  • কেন Mongoose?
  • Installation
  • Connection
  • Schema
  • Model
  • Document
  • CRUD
  • Querying
  • Validation
  • Middleware
  • Population
  • Aggregation
  • Virtuals
  • Indexes
  • Error Handling
  • Update Operators
  • Transactions
  • Express Integration
  • Blog Project
  • Best Practices
  1. Docs
  2. MongoDB
  3. Express + Mongoose REST API
MongoDBAdvanced

Express + Mongoose REST API

Express দিয়ে Mongoose-ভিত্তিক পূর্ণাঙ্গ REST API — route, controller, model — বাংলায়।

10টি অংশবাংলা ভাষায়

প্রজেক্ট কাঠামো

Folder structuretext
text
my-api/
├── models/
│   └── User.js
├── routes/
│   └── users.js
├── db.js
├── server.js
└── package.json

Model + db

models/User.jsjs
js
import mongoose from "mongoose";

const userSchema = new mongoose.Schema(
  {
    name: { type: String, required: true },
    email: { type: String, required: true, unique: true },
    age: Number,
  },
  { timestamps: true }
);

export default mongoose.model("User", userSchema);
db.jsjs
js
import mongoose from "mongoose";

export async function connectDB(uri) {
  await mongoose.connect(uri);
  console.log("MongoDB connected");
}

Routes + Controller

routes/users.jsjs
js
import { Router } from "express";
import User from "../models/User.js";

const router = Router();

// GET /api/users — সব user (pagination সহ)
router.get("/", async (req, res, next) => {
  try {
    const page = Number(req.query.page) || 1;
    const limit = Number(req.query.limit) || 10;

    const [users, total] = await Promise.all([
      User.find().skip((page - 1) * limit).limit(limit).lean(),
      User.countDocuments(),
    ]);

    res.json({ users, total, page });
  } catch (err) {
    next(err);
  }
});

// GET /api/users/:id
router.get("/:id", async (req, res, next) => {
  try {
    const user = await User.findById(req.params.id).lean();
    if (!user) return res.status(404).json({ message: "User নেই" });
    res.json(user);
  } catch (err) {
    next(err);
  }
});

// POST /api/users
router.post("/", async (req, res, next) => {
  try {
    const user = await User.create(req.body);
    res.status(201).json(user);
  } catch (err) {
    next(err);
  }
});

// PATCH /api/users/:id
router.patch("/:id", async (req, res, next) => {
  try {
    const user = await User.findByIdAndUpdate(req.params.id, req.body, {
      new: true,
      runValidators: true,
    });
    if (!user) return res.status(404).json({ message: "User নেই" });
    res.json(user);
  } catch (err) {
    next(err);
  }
});

// DELETE /api/users/:id
router.delete("/:id", async (req, res, next) => {
  try {
    const deleted = await User.findByIdAndDelete(req.params.id);
    if (!deleted) return res.status(404).json({ message: "User নেই" });
    res.sendStatus(204);
  } catch (err) {
    next(err);
  }
});

export default router;

Server

server.jsjs
js
import express from "express";
import { connectDB } from "./db.js";
import usersRouter from "./routes/users.js";

const app = express();
app.use(express.json());

app.use("/api/users", usersRouter);

// কেন্দ্রীয় error handler
app.use((err, req, res, next) => {
  if (err.name === "ValidationError") {
    return res.status(400).json({ message: "Validation failed" });
  }
  if (err.code === 11000) {
    return res.status(409).json({ message: "Duplicate value" });
  }
  res.status(500).json({ message: "Internal server error" });
});

const PORT = process.env.PORT || 3000;

await connectDB(process.env.MONGODB_URI);
app.listen(PORT, () => console.log("Server on", PORT));
runValidators

findByIdAndUpdate-এ schema validation চালাতে `{ runValidators: true }` অপরিহার্য — না দিলে required/enum ইত্যাদি check হয় না।

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
আগেরTransactions (Multi-Document ACID)পরেরReal Project: Blog
এই পেজে
Tech Tutor

বাংলায় ওয়েব ডেভেলপমেন্ট ডকুমেন্টেশন শিখুন — ধাপে ধাপে।

Homeসব ডকুমেন্টেশনQuick Startআমার নোটস

© 2026 Tech Tutor. বাংলায় শিখুন, বাংলায় গড়ুন।

mdanamolhasan1998@gmail.com