"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > Next JS Blog App

Next JS Blog App

Published on 2024-11-08
Browse:985

Next JS Blog App

To build a blog app using Next.js with both backend and frontend, where users can add and delete blogs, and store the data in a database, follow these steps:

1. Set Up Next.js Project

First, create a new Next.js project if you haven't already:

npx create-next-app@latest blog-app
cd blog-app
npm install

2. Set Up Database

For this project, let's use MongoDB via Mongoose as the database.

  • Install Mongoose:
npm install mongoose
  • Create a MongoDB database using services like MongoDB Atlas or use a local MongoDB setup.

  • Connect to MongoDB by creating a lib/mongodb.js file:

// lib/mongodb.js
import mongoose from 'mongoose';

const MONGODB_URI = process.env.MONGODB_URI;

if (!MONGODB_URI) {
  throw new Error('Please define the MONGODB_URI environment variable');
}

let cached = global.mongoose;

if (!cached) {
  cached = global.mongoose = { conn: null, promise: null };
}

async function dbConnect() {
  if (cached.conn) {
    return cached.conn;
  }

  if (!cached.promise) {
    cached.promise = mongoose.connect(MONGODB_URI).then((mongoose) => {
      return mongoose;
    });
  }
  cached.conn = await cached.promise;
  return cached.conn;
}

export default dbConnect;

Add the MONGODB_URI to your .env.local file:

MONGODB_URI=mongodb srv://:@cluster0.mongodb.net/blog-app?retryWrites=true&w=majority

3. Define Blog Schema

Create a model for blogs in models/Blog.js:

// models/Blog.js
import mongoose from 'mongoose';

const BlogSchema = new mongoose.Schema({
  title: {
    type: String,
    required: true,
  },
  content: {
    type: String,
    required: true,
  },
}, { timestamps: true });

export default mongoose.models.Blog || mongoose.model('Blog', BlogSchema);

4. Create API Routes for Blog

In Next.js, you can create API routes in the pages/api directory.

  • Create pages/api/blog/index.js for handling GET and POST requests (adding blogs):
// pages/api/blog/index.js
import dbConnect from '../../../lib/mongodb';
import Blog from '../../../models/Blog';

export default async function handler(req, res) {
  const { method } = req;

  await dbConnect();

  switch (method) {
    case 'GET':
      try {
        const blogs = await Blog.find({});
        res.status(200).json({ success: true, data: blogs });
      } catch (error) {
        res.status(400).json({ success: false });
      }
      break;
    case 'POST':
      try {
        const blog = await Blog.create(req.body);
        res.status(201).json({ success: true, data: blog });
      } catch (error) {
        res.status(400).json({ success: false });
      }
      break;
    default:
      res.status(400).json({ success: false });
      break;
  }
}
  • Create pages/api/blog/[id].js for handling DELETE requests:
// pages/api/blog/[id].js
import dbConnect from '../../../lib/mongodb';
import Blog from '../../../models/Blog';

export default async function handler(req, res) {
  const { method } = req;
  const { id } = req.query;

  await dbConnect();

  switch (method) {
    case 'DELETE':
      try {
        const blog = await Blog.findByIdAndDelete(id);
        if (!blog) {
          return res.status(400).json({ success: false });
        }
        res.status(200).json({ success: true, data: {} });
      } catch (error) {
        res.status(400).json({ success: false });
      }
      break;
    default:
      res.status(400).json({ success: false });
      break;
  }
}

5. Create Frontend for Adding and Displaying Blogs

  • Create a page pages/index.js for listing all blogs and a form for adding new blogs:
// pages/index.js
import { useState, useEffect } from 'react';
import axios from 'axios';

export default function Home() {
  const [blogs, setBlogs] = useState([]);
  const [title, setTitle] = useState('');
  const [content, setContent] = useState('');

  useEffect(() => {
    async function fetchBlogs() {
      const response = await axios.get('/api/blog');
      setBlogs(response.data.data);
    }
    fetchBlogs();
  }, []);

  const addBlog = async () => {
    const response = await axios.post('/api/blog', { title, content });
    setBlogs([...blogs, response.data.data]);
    setTitle('');
    setContent('');
  };

  const deleteBlog = async (id) => {
    await axios.delete(`/api/blog/${id}`);
    setBlogs(blogs.filter(blog => blog._id !== id));
  };

  return (
    

Blog App

{ e.preventDefault(); addBlog(); }}> setTitle(e.target.value)} placeholder="Blog Title" />

Blogs

    {blogs.map(blog => (
  • {blog.title}

    {blog.content}

  • ))}
); }

6. Start the Server

Run your application:

npm run dev

7. Testing the App

  • You can now add and delete blogs, and all data will be stored in your MongoDB database.

Let me know if you need further details!

Release Statement This article is reproduced at: https://dev.to/iamyathz/next-js-blog-app-4e1f?1 If there is any infringement, please contact [email protected] to delete it
Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3