Skip to content

06 Project Structure

Jab project bada hota hai, to sab code ek server.js file me rakhna paagalpan hai! ๐Ÿคฏ Humein ek Standard Folder Structure chahiye. Industry me sabse common pattern hai MVC (Model-View-Controller).

The Production-Ready Structure ๐Ÿ—‚๏ธ

Aapka project kuch aisa dikhna chahiye:

my-node-app/
โ”‚
โ”œโ”€โ”€ node_modules/ (Dependencies - Don't touch)
โ”œโ”€โ”€ src/
โ”‚ โ”œโ”€โ”€ config/ (Database connect, Passport strategies)
โ”‚ โ”‚ โ””โ”€โ”€ db.js
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ controllers/ (Logic yahan likhein - Request/Response handle)
โ”‚ โ”‚ โ””โ”€โ”€ userController.js
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ models/ (Database Schemas - Mongoose Models)
โ”‚ โ”‚ โ””โ”€โ”€ User.js
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ routes/ (API endpoints definition)
โ”‚ โ”‚ โ””โ”€โ”€ userRoutes.js
โ”‚ โ”‚
โ”‚ โ”œโ”€โ”€ middlewares/ (Auth check, Error handlers)
โ”‚ โ”‚ โ””โ”€โ”€ authMiddleware.js
โ”‚ โ”‚
โ”‚ โ””โ”€โ”€ utils/ (Helper functions like 'sendEmail')
โ”‚ โ””โ”€โ”€ emailSender.js
โ”‚
โ”œโ”€โ”€ .env (Secret keys, Port, DB_URL)
โ”œโ”€โ”€ .gitignore (node_modules aur .env ko ignore karein)
โ”œโ”€โ”€ package.json (Project details aur scripts)
โ””โ”€โ”€ server.js (Entry point - Sirf server start karega)

Folder by Folder Breakdown

1. config/ (Settings)

Database connection ya third-party services (AWS, Nodemailer) ki settings yahan rakhein. Example: db.js

// Database connection logic
const mongoose = require('mongoose');
const connectDB = async () => { ... };
module.exports = connectDB;

2. models/ (Data Shape)

Aapka data kaisa dikhega? Ye Mongoose schemas hain. Example: User.js

const userSchema = new mongoose.Schema({ name: String, email: String });
module.exports = mongoose.model('User', userSchema);

3. routes/ (Raaste)

Sirf endpoints define karein, logic nahi. Example: userRoutes.js

const express = require('express');
const router = express.Router();
const { registerUser } = require('../controllers/userController');
router.post('/register', registerUser); // Logic controller me hai
module.exports = router;

4. controllers/ (The Brain ๐Ÿง )

Asli logic yahan hota hai. Request aati hai, process hoti hai, aur response jata hai. Example: userController.js

const User = require('../models/User');
exports.registerUser = async (req, res) => {
// 1. Data validate karo
// 2. User create karo
// 3. Response bhejo
res.status(201).json({ message: "User created" });
};

5. middlewares/ (Guardians ๐Ÿ›ก๏ธ)

Routes ko protect karne ke liye. Example: authMiddleware.js

const protect = (req, res, next) => {
// Token check karo
if (!token) return res.status(401).send("Not Authorized");
next();
};

Server.js (Entry Point)

Ye file ab clean honi chahiye!

require('dotenv').config();
const express = require('express');
const connectDB = require('./src/config/db');
const userRoutes = require('./src/routes/userRoutes');
const app = express();
// Database Connect
connectDB();
// Middlewares
app.use(express.json());
// Routes
app.use('/api/users', userRoutes);
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

Summary

Organization is key to scalability.

  • MVC Pattern use karein.
  • Logic ko controllers me rakhein.
  • Routes ko routes folder me.
  • Configs aur Models alag rakhein.

Is tarah aapka code clean, readable, aur maintainable rahega! ๐Ÿงนโœจ