Для создания дерева комментариев в 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.