【问题标题】:MongoDB check for existing valueMongoDB 检查现有值
【发布时间】:2017-06-30 18:07:13
【问题描述】:

如何在继续发布路由之前检查 mongo/mongoose 值是否存在?

我的(部分)猫鼬模型如下所示:

 reserved: {type: Boolean, default: false}
 module.exports = mongoose.model("Rentals", rentalsSchema);

我一直在尝试以这种方式检查reserved是否为真,没有任何运气

注意:正如您将在下面看到的,这需要适用于每个出租 ID,因此它需要以某种方式找到 findById。

router.put("/:id/reserve", middleware.checkRentalsStatus, function(req, res){


     //checking here for existing value
     //checking here for existing value

     if(Rentals.reserved == true){
            res.redirect("back");
            console.log('TAKEN!')
        } else {


 // Token is created using Stripe.js or Checkout!
// Get the payment token submitted by the form:
 var token = req.body.stripeToken; // Using Express

// Charge the user's card:
  var charge = stripe.charges.create({
  amount: 19500,
  currency: "usd",
  description: "",
  source: token,
}, function(err, charge) {
     if(err){
            req.flash("error", err.message);
            res.redirect("back");
        } else {


    var reservedby = req.body.reservedby;
    var reserved = true;
    var reservedemail = req.body.reservedemail;
    var newReservation = {reserved: reserved, reservedby: reservedby, reservedemail: reservedemail }
    Rentals.findByIdAndUpdate(req.params.id, {$set: newReservation}, function(err, rentals){
        if(err){
            req.flash("error", err.message);
            res.redirect("back");
        } else {

            req.flash("success","It's reserved for you. Thank you!");
            res.redirect("/rentals/" + rentals._id);
        }
    });

}
});

  console.log('charged')
});

如何在完成发布路线之前更改我的代码以检查 reserved 是否为真? (我正在尝试检查后端的保留路线上是否有租用。)

【问题讨论】:

  • 请提供完整代码。
  • 在这种情况下什么是租赁以及您是如何从 Mongo 中获取价值的。
  • 试试这样,我通常在我的代码中尝试它。 if(Rentals.reserved){ res.redirect("back"); console.log('TAKEN!') } else { // 继续发布路由
  • 在输入此 if 条件之前打印 Rentals.reserved 的值。
  • 对你有用吗。

标签: node.js mongodb authentication post npm


【解决方案1】:

你可以像这样直接检查 if/else 条件

  if(Rentals.reserved )
     { res.redirect("back"); console.log('TAKEN!') } 
        else { // continue with post route 
       }

【讨论】:

  • @AndrewLeonardi 您的架构将reserved 定义为BooleanBooleantruefalse。不需要相等性检查。
【解决方案2】:

这就是答案。最好的方法是创建一个中间件来检查。其他答案的问题是他们没有找到肾脏的 ID。 Rentals.findByID 是完成这项工作的关键。 :)

//CHECK Rentals HAS NOT BEEN RENTED
middlewareObj.checkRentalsStatus = function(req, res, next){
    Rentals.findById(req.params.id, function(err, foundRentals){
    if (err){
        res.redirect("back");
    }

  if (foundRentals.reserved){
            req.flash("error", 'Oh no! It looks like someone else JUST rented this location. Your credit card was not charged.');
            res.redirect("back");
} else {
next();
}
});
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2021-09-27
    • 2012-11-16
    • 1970-01-01
    相关资源
    最近更新 更多