#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. @Георгий Гвимрадзе, есть какие-нибудь мысли? есть еще какие-нибудь вопросы? что-нибудь?