Maison > interface Web > js tutoriel > Application de blog JS suivante

Application de blog JS suivante

王林
Libérer: 2024-09-05 17:32:09
original
1068 Les gens l'ont consulté

Next JS Blog App

Pour créer une application de blog à l'aide de Next.js avec à la fois un backend et un frontend, où les utilisateurs peuvent ajouter et supprimer des blogs et stocker les données dans une base de données, suivez ces étapes :

1. Configurer le projet Next.js

Tout d'abord, créez un nouveau projet Next.js si ce n'est pas déjà fait :

npx create-next-app@latest blog-app
cd blog-app
npm install
Copier après la connexion

2. Configurer la base de données

Pour ce projet, utilisons MongoDB via Mongoose comme base de données.

  • Installer Mongoose :
npm install mongoose
Copier après la connexion
  • Créez une base de données MongoDB à l'aide de services tels que MongoDB Atlas ou utilisez une configuration MongoDB locale.

  • Connectez-vous à MongoDB en créant un fichier 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;
Copier après la connexion

Ajoutez le MONGODB_URI à votre fichier .env.local :

MONGODB_URI=mongodb+srv://<username>:<password>@cluster0.mongodb.net/blog-app?retryWrites=true&w=majority
Copier après la connexion

3. Définir le schéma du blog

Créez un modèle pour les blogs dans 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);
Copier après la connexion

4. Créer des routes API pour le blog

Dans Next.js, vous pouvez créer des routes API dans le répertoire pages/api.

  • Créer des pages/api/blog/index.js pour gérer les requêtes GET et POST (ajout de 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;
  }
}
Copier après la connexion
  • Créez des pages/api/blog/[id].js pour gérer les requêtes DELETE :
// 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;
  }
}
Copier après la connexion

5. Créer une interface pour ajouter et afficher des blogs

  • Créez une page pages/index.js pour lister tous les blogs et un formulaire pour ajouter de nouveaux 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 (
    <div>
      <h1>Blog App</h1>
      <form onSubmit={(e) => { e.preventDefault(); addBlog(); }}>
        <input
          type="text"
          value={title}
          onChange={(e) => setTitle(e.target.value)}
          placeholder="Blog Title"
        />
        <textarea
          value={content}
          onChange={(e) => setContent(e.target.value)}
          placeholder="Blog Content"
        />
        <button type="submit">Add Blog</button>
      </form>
      <h2>Blogs</h2>
      <ul>
        {blogs.map(blog => (
          <li key={blog._id}>
            <h3>{blog.title}</h3>
            <p>{blog.content}</p>
            <button onClick={() => deleteBlog(blog._id)}>Delete</button>
          </li>
        ))}
      </ul>
    </div>
  );
}
Copier après la connexion

6. Démarrez le serveur

Exécutez votre application :

npm run dev
Copier après la connexion

7. Test de l'application

  • Vous pouvez désormais ajouter et supprimer des blogs, et toutes les données seront stockées dans votre base de données MongoDB.

Faites-moi savoir si vous avez besoin de plus de détails !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal