「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 次のJSブログアプリ

次のJSブログアプリ

2024 年 11 月 8 日に公開
ブラウズ:891

Next JS Blog App

バックエンドとフロントエンドの両方で Next.js を使用して、ユーザーがブログを追加および削除し、データベースにデータを保存できるブログ アプリを構築するには、次の手順に従います。

1. Next.js プロジェクトをセットアップする

まず、新しい Next.js プロジェクトをまだ作成していない場合は作成します。

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

2. データベースのセットアップ

このプロジェクトでは、データベースとして Mongoose 経由の MongoDB を使用しましょう。

  • Mongoose をインストールします:
npm install mongoose
  • MongoDB Atlas などのサービスを使用して MongoDB データベースを作成するか、ローカルの MongoDB セットアップを使用します。

  • lib/mongodb.js ファイルを作成して MongoDB に接続します:

// 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 では、pages/api ディレクトリに API ルートを作成できます。

  • GET リクエストと POST リクエストを処理するための Pages/api/blog/index.js を作成します (ブログを追加します)。
// 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;
  }
}
  • DELETE リクエストを処理するための pages/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