"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تطبيق مدونة JS التالي

تطبيق مدونة JS التالي

تم النشر بتاريخ 2024-11-08
تصفح:573

Next JS Blog App

لإنشاء تطبيق مدونة باستخدام Next.js مع كل من الواجهة الخلفية والواجهة الأمامية، حيث يمكن للمستخدمين إضافة المدونات وحذفها، وتخزين البيانات في قاعدة بيانات، اتبع الخطوات التالية:

1. إعداد مشروع Next.js

أولاً، قم بإنشاء مشروع Next.js جديد إذا لم تقم بذلك بالفعل:

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

2. إعداد قاعدة البيانات

لهذا المشروع، دعونا نستخدم MongoDB عبر Mongoose كقاعدة بيانات.

  • تثبيت النمس:
npm install mongoose
  • قم بإنشاء قاعدة بيانات MongoDB باستخدام خدمات مثل MongoDB Atlas أو استخدم إعداد MongoDB محلي.

  • اتصل بـ MongoDB عن طريق إنشاء ملف lib/mongodb.js:

// 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;

أضف MONGODB_URI إلى ملف .env.local الخاص بك:

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

3. تحديد مخطط المدونة

إنشاء نموذج للمدونات في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. إنشاء مسارات API للمدونة

في Next.js، يمكنك إنشاء مسارات API في دليل الصفحات/api.

  • إنشاء صفحات/api/blog/index.js للتعامل مع طلبات GET وPOST (إضافة مدونات):
// 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;
  }
}
  • إنشاء صفحات/api/blog/[id].js للتعامل مع طلبات الحذف:
// 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. إنشاء واجهة أمامية لإضافة المدونات وعرضها

  • إنشاء صفحة pages/index.js لسرد كافة المدونات ونموذج لإضافة مدونات جديدة:
// 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. بدء تشغيل الخادم

قم بتشغيل التطبيق الخاص بك:

npm run dev

7. اختبار التطبيق

  • يمكنك الآن إضافة وحذف المدونات، وسيتم تخزين جميع البيانات في قاعدة بيانات MongoDB الخاصة بك.

أخبرني إذا كنت بحاجة إلى مزيد من التفاصيل!

بيان الافراج هذه المقالة مستنسخة على: https://dev.to/iamyathz/next-js-blog-app-4e1f?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3