在Node.js博客应用中仅发布一次请求

时间:2018-07-08 06:04:44

标签: node.js mongodb express

在我的博客应用程序中,我希望用户仅评论一次。博客应用是使用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,         参考:“用户”     },     用户名:字符串     }

2 个答案:

答案 0 :(得分:0)

  1. 在数据库中创建comments表。它包括有关用户的信息以及用户对帖子的评论(例如comments.user_idcomments.post_id
  2. express处理程序在某个端点POST上接受/comments请求。在本机构中,您希望可能通过某些身份验证机制(请参阅passport可能会帮助您)和一些post_id来接收user_idcontent
  3. 向数据库发送请求,以检查当前用户是否对此帖子发表评论。查询示例:

    db.comments.find({ user_id: req.session.user_id, post_id: req.body.post_id })

  4. 如果该用户有评论(在db中找到)–发回状态400(错误请求)。如果不存在,请创建一个并发送200个状态代码。

答案 1 :(得分:0)

将用户ID插入集合中的某个位置,也许在用户添加评论时将其推入数组。 在添加评论之前,请检查userid是否还不存在。如果存在,则拒绝评论。 如果用户可以在每个博客上发表评论一次,也许也可以将blogID和userID一起插入。