Back to Modules

Complete Backend Development Tutorial

Master backend development with our comprehensive guide covering Node.js, Express.js, and MongoDB. Learn through practical examples and build production-ready applications.

Part 1

Part 2

Setting Up a Backend Project

Learn how to set up a complete backend project using Node.js, Express.js, and MongoDB. This guide covers project initialization, dependencies, and basic configuration.

Examples:

// Initialize project
npm init -y

// Install dependencies
npm install express mongoose dotenv cors

// Create server.js
const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
require('dotenv').config();

const app = express();

// Middleware
app.use(cors());
app.use(express.json());

// Connect to MongoDB
mongoose.connect(process.env.MONGODB_URI)
  .then(() => console.log('MongoDB connected'))
  .catch(err => console.error('MongoDB connection error:', err));

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

Basic setup for a Node.js backend with Express and MongoDB

Creating RESTful APIs

Build a complete REST API with Express.js, including route handling, middleware implementation, and MongoDB integration.

Examples:

// User Model (models/User.js)
const mongoose = require('mongoose');

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

module.exports = mongoose.model('User', userSchema);

// Routes (routes/users.js)
const router = express.Router();
const User = require('../models/User');

// Get all users
router.get('/users', async (req, res) => {
  try {
    const users = await User.find();
    res.json(users);
  } catch (err) {
    res.status(500).json({ message: err.message });
  }
});

// Create user
router.post('/users', async (req, res) => {
  const user = new User(req.body);
  try {
    const newUser = await user.save();
    res.status(201).json(newUser);
  } catch (err) {
    res.status(400).json({ message: err.message });
  }
});

Creating a RESTful API with Express.js and MongoDB

Authentication & Authorization

Implement user authentication and authorization using JSON Web Tokens (JWT) in your Node.js application.

Examples:

// Install JWT
npm install jsonwebtoken

// Auth Middleware
const jwt = require('jsonwebtoken');

const auth = (req, res, next) => {
  try {
    const token = req.header('Authorization').replace('Bearer ', '');
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    req.userId = decoded.id;
    next();
  } catch (err) {
    res.status(401).json({ message: 'Please authenticate' });
  }
};

// Login Route
router.post('/login', async (req, res) => {
  try {
    const user = await User.findOne({ email: req.body.email });
    if (!user) {
      return res.status(401).json({ message: 'Login failed' });
    }
    
    const token = jwt.sign({ id: user._id }, process.env.JWT_SECRET);
    res.json({ token });
  } catch (err) {
    res.status(400).json({ message: err.message });
  }
});

// Protected Route
router.get('/profile', auth, async (req, res) => {
  try {
    const user = await User.findById(req.userId);
    res.json(user);
  } catch (err) {
    res.status(500).json({ message: err.message });
  }
});

Implementing JWT authentication in a Node.js application