在我的博客应用程序中,我希望用户仅评论一次。博客应用是使用nodejs,mongodb和express构建的。有哪些解决方法?不要求实际的代码,只是关于如何实现这一点的想法。
router.post("/",[
check('text').exists().isLength({ min: 2, max:7999 }).trim()
], middleware.isLoggedIn, function(req,res) {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.redirect("back");
}
Car.findById(req.params.id, function(err,car){
if(err) {
console.log(err)
res.redirect("/cars")
} else {
Comment.create(req.body, function(err,comment) {
if(err) {
req.flash("error", "Something went wrong, please try again.")
} else {
comment.author.id= req.user._id;
comment.author.username = req.user.username;
comment.car.id = car._id;
comment.car.carname = car.name;
console.log(comment.author.id== req.user._id, comment._id, "true or false");
console.log(comment._id)
comment.save();
car.comments.push(comment);
car.save();
req.flash("success", "Successfully added review")
res.redirect("/cars/"+car._id)
}
})
}
})
});
var commentSchema = mongoose.Schema({
text: String,
作者:{ ID: { 类型:mongoose.Schema.Types.ObjectId, 参考:“用户” }, 用户名:字符串 }
答案 0 :(得分:0)
comments
表。它包括有关用户的信息以及用户对帖子的评论(例如comments.user_id
,comments.post_id
express
处理程序在某个端点POST
上接受/comments
请求。在本机构中,您希望可能通过某些身份验证机制(请参阅passport可能会帮助您)和一些post_id
来接收user_id
,content
。向数据库发送请求,以检查当前用户是否对此帖子发表评论。查询示例:
db.comments.find({ user_id: req.session.user_id, post_id: req.body.post_id })
如果该用户有评论(在db中找到)–发回状态400(错误请求)。如果不存在,请创建一个并发送200个状态代码。
答案 1 :(得分:0)
将用户ID插入集合中的某个位置,也许在用户添加评论时将其推入数组。 在添加评论之前,请检查userid是否还不存在。如果存在,则拒绝评论。 如果用户可以在每个博客上发表评论一次,也许也可以将blogID和userID一起插入。