Can't I use the req.user inside promises in nodejs?

47 Views Asked by At

I am trying to do the stripe payment using nodejs and I am getting the following errors. One in console and one in web app UI in the browser. What are the reasons? Also I am trying to use req.user property details which are saved in mongoDB. I am getting the console error as : (node:6344) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'subscriptionPlan' of undefined and on browser =>

 Error: You cannot use a Stripe token more than once: tok_1IJggu*******************.

Below is my code:

  router.post('/processPayment/:priceID', (req, res) => {

     console.log("plan Token = "+ req.body.stripeToken);
     console.log("plan Email = "+ req.body.stripeEmail);
     var dateFormated, dateFormated2;

     return stripe2.customers.create({
       source: req.body.stripeToken,
       email: req.body.stripeEmail
     }).then(customer => {
       stripe2.subscriptions.create({
         customer: customer.id,
         items: [
           {
             plan: req.params.priceID
           }
         ]
       }).then(subscription => {
         console.log("subscription.status = "+ subscription.status);
         dateFormated = new Date();
         dateFormated2 = new Date();
         console.log(dateFormated2.getMinutes() +' '+dateFormated2.getHours()+' '+dateFormated2.getDate() + ' * *');

         var j = schedule.scheduleJob(dateFormated2.getMinutes() +' '+dateFormated2.getHours()+' '+dateFormated2.getDate() + ' * *',function(){
           var snm = new Date();

           return stripe2.subscriptions.retrieve(req.user.subsID)
           .then(subsData => {
             console.log("Status = "+ subsData.status);
            if(subsData.status == 'active')
            {
           User.findOneAndUpdate({_id:req.user.id},
             {$set: {"subscriptionDuplicateDate":req.user.subscriptionNextMonth }},
           function (error, data) {
                 if (error) {
                     console.log(error);
                     return res.render("error",{error:error});
                 }
                 else if(req.user.subscriptionPlan == '$299' || req.user.subscriptionPlan == '$499' || req.user.subscriptionPlan == '$999')
                 {
                   snm = snm.setMonth(snm.getMonth() + 1);
                   console.log("snm = "+ snm);
                   User.findOneAndUpdate({_id:req.user.id},
                     {$set: {"subscriptionNextMonth" : new Date(snm.toLocaleString())}},
                   function (error, data) {
                         if (error) {
                             console.log(error);
                             return res.render("error",{error:error});
                         }
                       })
                   console.log('Your scheduled job every month');
                 }
                 else if(req.user.subscriptionPlan == '$2990' || req.user.subscriptionPlan == '$4990' || req.user.subscriptionPlan == '$9990')
                 {
                   snm = snm.setFullYear(snm.getFullYear() + 1);
                   console.log("snm = "+ snm);
                   User.findOneAndUpdate({_id:req.user.id},
                     {$set: {"subscriptionNextMonth" :  new Date(snm.toLocaleString())}},
                   function (error, data) {
                         if (error) {
                             console.log(error);
                             return res.render("error",{error:error});
                         }
                       })
                   console.log('Your scheduled job every year');
                 }
               })
             }
             else {
               User.findOneAndUpdate({_id:req.user.id},
                 {$set: {"subscriptionTotalCount" : 0}},
               function (error, data) {
                     if (error) {
                         console.log(error);
                         return res.render("error",{error:error});
                     }
                   })
             }
             }).catch(err => {
               res.render('error', {message: err});
             });
         });

          if(req.user.subscriptionPlan == '$299' || req.user.subscriptionPlan == '$499' || req.user.subscriptionPlan == '$999')
         {
           User.findOneAndUpdate({_id:req.user.id},
             {$set: {"subscriptionDate":dateFormated,
                     "subscriptionDuplicateDate":dateFormated,
                     "subscriptionNextMonth":new Date(dateFormated.setMonth(dateFormated.getMonth() + 1))}},
           function (error, data) {
             if(data)
             console.log("subscription date set");
           })
         }
         else if(req.user.subscriptionPlan == '$2990' || req.user.subscriptionPlan == '$4990' || req.user.subscriptionPlan == '$9990')
         {
           User.findOneAndUpdate({_id:req.user.id},
             {$set: {"subscriptionDate":dateFormated,
                     "subscriptionDuplicateDate":dateFormated,
                     "subscriptionNextMonth":new Date(dateFormated.setFullYear(dateFormated.getFullYear() + 1))}},
           function (error, data) {
             if(data)
             console.log("subscription date set");
           })
         }
         // console.log("subscription.items = "+ JSON.stringify(subscription.items));
         console.dir(subscription);

         res.redirect('/thankyou/0d4a3bc9cd71c4500584f01e7ce74cc6f2a4967ca266f3b7578ff29bd640dbbc/'+customer.id+'/'+subscription.id);
       })
     }).catch(err => {
       res.render('error', {message: err});
     });
   });
0

There are 0 best solutions below