Отредактированный объект/документ неправильно сохраняется в MongoDB в приложении MERN

#node.js #mongodb #express #mongoose

Вопрос:

Я создаю приложение MERN, в котором создаются и редактируются сообщения в блоге, а комментарии к сообщениям в блоге можно добавлять и редактировать. Когда сообщение в блоге добавляется или редактируется, все работает так, как ожидалось, и комментарии также добавляются так, как ожидалось. Но когда комментарий редактируется, он неправильно сохраняется в базе данных. Он сохраняется во время сеанса из-за функций рендеринга, которые я добавил в файлы react, но когда приложение перезагружается, редактирование комментария исчезает, и комментарий возвращается к тому, каким он был изначально. Когда я смотрю на базу данных, я замечаю, что отредактированный комментарий добавляется сам по себе, но его исходная копия внутри комментария не редактируется. Я предполагаю, что есть проблема с тем, как я настраиваю схемы моделей, и/или я не получаю прямой доступ к документу сообщения в блоге. Но я не знаю точно, в чем проблема, несмотря на то, что я пытался.

Ниже приведены две функции редактирования, которые я пробовал в файлах express/mongoose на стороне сервера, первая из которых успешно добавила отредактированный комментарий в базу данных, но не смогла получить доступ и отредактировать исходный комментарий внутри сообщения в блоге. Второй — это учет идентификатора объекта сообщения, в котором находится комментарий, но это просто приводит к ошибке 500 и никуда не ведет. У меня также есть схемы сообщений в блоге и комментариев, чтобы дать лучшее представление о том, в чем может заключаться проблема.

 
    try {
        let newDate = new Date();
        let date = newDate.toDateString();
        let post = req.params.postid;

       const { title, content } = req.body;

        const updatedComment = await Comment.findByIdAndUpdate(req.params.commentid, {title, date, content, post});
     
        await updatedComment.save();

        res.status(200).json(updatedComment);
    } catch (error) {
        res.status(404).json( {message: error.message} );
    }
}

 
     try {
        const { title, content } = req.body;

        let newDate = new Date();
        let date = newDate.toDateString();
        let post = new mongoose.Types.ObjectId(req.params.postid);

        const postDoc = await Post.findById(post).lean().exec();
    
        const comment = await Comment.findById(req.params.commentid).exec();
    
        comment.title = title;
        comment.date = date;
        comment.content = content;
        comment.post = post;
    
        const updatedComment = await comment.save();
    
        res.status(200).json(updatedComment);
    } catch (error) {
       res.status(500).json( {message: error.message} );
    }
}
 
 var PostSchema = new Schema({
    title: {type: String, required: true, maxLength: 300},
    date: {type: String, required: true},
    content: {type: String, required: true},
    comments: [{type: Object, required: true}], 
})

module.exports = mongoose.model('Post', PostSchema);


var CommentSchema = new Schema({

    title: {type: String, required: true, maxLength: 300},
    date: {type: String, required: true},
    content: {type: String, required: true},
    post:{type: Schema.Types.ObjectId, ref:"Post", required: true},
})

module.exports = mongoose.model('Comment', CommentSchema);
 

Комментарии:

1. Я не вижу ничего, связанного с самой реакцией :/

2. Ну, это в папке на стороне клиента, и проблема не в файлах реакции. Вы хотите, чтобы я удалил тег react, чтобы люди не путались?

3. Это было бы неплохо, потому что это не имеет прямого отношения.

4. Хорошо, вопрос прояснен. Все, что содержится в коде, блокируется в задней части

5. @Георгий Гвимрадзе, есть какие-нибудь мысли? есть еще какие-нибудь вопросы? что-нибудь?