2017-06-30 5 views
0

Wie überprüfe ich, ob ein Mongo/Mungo-Wert existiert, bevor ich in einer Post-Route fortfahre?MongoDB auf vorhandenen Wert prüfen

Mein (teilweise) Mongoose Modell sieht wie folgt aus:

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

Ich habe zu prüfen, versucht, um zu sehen, reserviert, wenn ohne Erfolg auf diese Weise wahr ist

HINWEIS: Wie Sie siehe unten, das muss für jede Miet-ID funktionieren, so dass es irgendwie gefunden werden muss.

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') 
}); 

Wie würde ich meinen Code ändern, um zu prüfen, ob reserviert ist, bevor die Post-Route beendet wird? (Ich versuche, zu überprüfen, ob eine Vermietung auf einer Reserveroute im Backend zur Verfügung.)

+0

Bitte geben Sie den vollständigen Code. –

+0

Was ist in diesem Fall Vermietung und wie haben Sie den Wert von Mongo abgerufen. –

+0

Probieren Sie es einfach so aus, dass ich es normalerweise in meinem Code probiere. if (Rentals.reserved) { res.redirect ("zurück"); console.log ('TAKEN!') } else { // weiter mit post route –

Antwort

-1

Dies ist die Antwort. Der beste Weg ist, eine Middleware zu erstellen. Das Problem mit den anderen Antworten ist, dass sie die ID der Niere nicht finden. Rentals.findByID ist der Schlüssel dafür, dass dies funktioniert. :)

//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(); 
} 
}); 
} 
-1

Sie können direkt überprüfen, ob/else Zustand wie diese

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

@AndrewLeonardi Ihr Schema definiert 'reserved' als' Boolean'. Ein 'Boolean' ist entweder 'wahr' oder 'falsch'. Es ist keine Gleichheitsprüfung erforderlich. –

Verwandte Themen