HomeProjectsBlogSnippetsVideos
    ← Back to Next.Js

    Api Routes

    4 snippets in Next.Js - Api Routes

    Setup Database Connection

    Setup Database Connection

    1import mongoose from "mongoose";
    2
    3const MONGODB_URI = process.env.MONGODB_URI;
    4
    5export default async function dbConnect() {
    6  if (mongoose.connection.readyState >= 1) return;
    7  try {
    8    await mongoose.connect(MONGODB_URI, {
    9      useNewUrlParser: true,
    10      useUnifiedTopology: true,
    11    });
    12    console.log("MongoDB Connected");
    13  } catch (error) {
    14    console.error("MongoDB Connection Error:", error);
    15  }
    16}
    javascript

    Define Schema

    Define Schema

    1import mongoose from "mongoose";
    2
    3const SnippetSchema = new mongoose.Schema({
    4  language: { type: String, required: true },
    5  code: { type: String, required: true },
    6});
    7
    8const TopicSchema = new mongoose.Schema({
    9  title: { type: String, required: true },
    10  description: { type: String },
    11  snippets: [SnippetSchema], // Multiple code snippets
    12});
    13
    14const Topic = mongoose.models.Topic || mongoose.model("Topic", TopicSchema);
    15export default Topic;
    javascript

    GET - Fetch Topics in Chunks

    GET - Fetch Topics in Chunks

    1import { NextResponse } from "next/server";
    2import dbConnect from "@/lib/dbConnect";
    3import Topic from "@/models/Topic";
    4
    5// Get topics with pagination
    6export async function GET(req) {
    7  try {
    8    await dbConnect();
    9
    10    const { searchParams } = new URL(req.url);
    11    const page = parseInt(searchParams.get("page") || "1");
    12    const limit = parseInt(searchParams.get("limit") || "5");
    13    const skip = (page - 1) * limit;
    14
    15    const topics = await Topic.find().skip(skip).limit(limit);
    16    const total = await Topic.countDocuments();
    17
    18    return NextResponse.json({ success: true, topics, total, page, limit });
    19  } catch (error) {
    20    return NextResponse.json({ success: false, message: error.message }, { status: 500 });
    21  }
    22}
    javascript

    3.2 POST - Add a Topic with Snippets javascript Copy Edit

    POST - Add a Topic with Snippets javascript Copy Edit

    1export async function POST(req) {
    2  try {
    3    await dbConnect();
    4    const { title, description, snippets } = await req.json();
    5
    6    const newTopic = new Topic({ title, description, snippets });
    7    await newTopic.save();
    8
    9    return NextResponse.json({ success: true, topic: newTopic }, { status: 201 });
    10  } catch (error) {
    11    return NextResponse.json({ success: false, message: error.message }, { status: 500 });
    12  }
    13}
    javascript