Как сделать дерево комментарии на node.js express?

Для создания дерева комментариев в MongoDB на Node.js с использованием Express можно использовать рекурсивный подход. Вот пошаговая инструкция:

1. Установите необходимые модули:

npm install express mongoose

2. Создайте модель для комментария. В файле comment.js:

const mongoose = require('mongoose');

const commentSchema = new mongoose.Schema({
  content: { type: String, required: true },
  comments: [{ type: mongoose.Types.ObjectId, ref: 'Comment' }],
});

const Comment = mongoose.model('Comment', commentSchema);

module.exports = Comment;

3. Подключите MongoDB и создайте основной файл вашего приложения, app.js:

const express = require('express');
const mongoose = require('mongoose');
const Comment = require('./models/comment');

// Подключение к MongoDB
mongoose.connect('mongodb://localhost:27017/commentTree', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

const app = express();

// Обработчик для получения всех комментариев
app.get('/comments', async (req, res) => {
  try {
    const comments = await Comment.find().populate('comments');
    res.json(comments);
  } catch (err) {
    res.status(500).json({ message: err.message });
  }
});

// Обработчик для создания комментария
app.post('/comments', async (req, res) => {
  const comment = new Comment({
    content: req.body.content,
  });

  try {
    await comment.save();
    res.status(201).json(comment);
  } catch (err) {
    res.status(400).json({ message: err.message });
  }
});

// Запуск сервера
app.listen(3000, () => {
  console.log('Server started on port 3000');
});

4. Запустите сервер:

node app.js

Теперь у вас есть сервер, который может создавать комментарии и отображать их в виде дерева. Например, вы можете отправить POST запрос на http://localhost:3000/comments со следующим JSON содержимым:

{
  "content": "Root comment"
}

А затем получить все комментарии по GET запросу на http://localhost:3000/comments.

В модели комментария используется массив comments, который хранит связи с дочерними комментариями. При создании нового комментария вы можете добавить его _id в массив comments родительского комментария, чтобы установить связь между ними.

При получении всех комментариев используется метод populate, который автоматически заполняет объекты комментариев из массива comments для предоставления полной иерархии дерева комментариев.

Обратите внимание, что данное решение предназначено для базы данных MongoDB.