0
votes

Im trying to save a json object in my database. The save() function is not being called but and the json object is never saved. Help me figure out the problem. I guess it's a connection problem with mongoose. Here is my code..

    var config = require('../config');
    var user = require('../user');
api.post('/addUser',function(req,res) {
    var userID;
    //creating a sample user under Model collection User.. so this becomes a document!!
    console.log("addition of new user api hit!!");
    //sending a query to retrieve the no of users served
    MongoClient.connect(dbURL, function (err, db) {
        var UserCountCursor = db.collection("ourusers").find({"docName": "userCount"}).limit(1);

        UserCountCursor.each(function (err, doc) {
            if (err)
                console.log("did not get the count");
            else
            // var countString= JSON.stringify(doc);
            //var docJson=JSON.parse(countString);
                console.log("the json content is:" + doc.iparkoUserCount);

            //increase the user count by 1 in the db.
            var incCount = parseInt(doc.iparkoUserCount) + 1;
            console.log("no of userrs:" + incCount);
            // making an userId
            userID = "ipkoID_C" + incCount.toString();
            //updating using MOngoClient
            db.collection("ourusers").update({"docName": "userCount"}, {$set: {"iparkoUserCount": incCount}});
            console.log("the user count in the db has been updated!!");
            console.log("generated id for this guy is:" + userID);

            if (userID != null) {
                console.log("calling the save function");
                //closing the mongoclient connection
                db.close();
                signUpUser(userID);
            }
        });
    });


    function signUpUser(userIDD) {
        var me = new user({
            name: req.body.new_name,
            password: req.body.new_pswd,
            username: req.body.new_username,
            phno: req.body.new_phn,
            userId: userIDD
        });

        console.log("the obj ::" + JSON.stringify(me));
        console.log("obj created and ready to be stored");
//connecting to the db using mongoose
        mongoose.connect(config.database, function (err) {
            if (err)
                console.log("The error is :"+err);
            else {
                console.log("WE ARE CONNECTED USING MONGOOSE");
                //saving the sample user document
                me.save(function (err) {
                    console.log("in the save func");
                    if (err) throw err;
                    else {
                        console.log('User saved Successfully!!!!!');
                        res.json({
                            'whatStatus': 'user saved in the database!!',
                            'userID': userIDD
                        });
                        mongoose.connection.close();
                    }
                });
            }
        });
    }
});

My console logs::

addition of new user api hit!! the json content is:143 no of userrs:144 the user count in the db has been updated!! generated id for this guy is:ipkoID_C144 calling the save function the obj ::{"name":"Abhi","password":"jio","username":"abhijio","phno":"45142545","userId":"ipkoID_C144","_id":"583295bfa0f9f8342035d3b9"} obj created and ready to be stored C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\lib\utils.js:98 process.nextTick(function() { throw err; }); ^

TypeError: Cannot read property 'iparkoUserCount' of null at C:\Users\shivendra\WebstormProjects\iParko\routes\RegisteredParkingLots.js:76:57 at handleCallback (C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\lib\utils.js:96:12) at C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\lib\cursor.js:742:16 at handleCallback (C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\lib\utils.js:96:12) at C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\lib\cursor.js:676:5 at handleCallback (C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\node_modules\mongodb-core\lib\cursor.js:156:5) at setCursorDeadAndNotified (C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\node_modules\mongodb-core\lib\cursor.js:496:3) at nextFunction (C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\node_modules\mongodb-core\lib\cursor.js:588:12) at Cursor.next [as _next] (C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\node_modules\mongodb-core\lib\cursor.js:681:3) at nextObject (C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\lib\cursor.js:673:8) at Cursor.next (C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\lib\cursor.js:262:12) at _each (C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\lib\cursor.js:738:10) at C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\lib\cursor.js:746:7 at handleCallback (C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\lib\utils.js:96:12) at C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\lib\cursor.js:676:5 at handleCallback (C:\Users\shivendra\WebstormProjects\iParko\node_modules\mongodb\node_modules\mongodb-core\lib\cursor.js:156:5)

Process finished with exit code 1

2

2 Answers

0
votes

You seem to be opening the db connection twice one with mongoose.connect and another one with mongoose.connection.open(). That's why you are getting error.

Try using this with just one connection as below.

mongoose.connect(config.database, function(err, db) {
            //var dbcon=mongoose.connection.open();

            //dbcon.on('error',function(){console.log('connction error:')});
            //dbcon.once('open',function(){
   if(err) {
      console.log(err);
   } else {
                console.log("WE ARE CONNECTED USING MONGOOSE");
                //saving the sample user document
                me.save(function (err) {
                    console.log("in the save func");
                    if (err) throw err;
                    else {
                        console.log('User saved Successfully!!!!!');
                        res.json({
                            'whatStatus': 'user saved in the database!!',
                            'userID': userIDD
                        });
                        //mongoose.connection.close();
                    }
                });
          }
    });
0
votes

Inside your UserCountCursor.each(...) loop, after checking for err you should also check for doc. So where you have this:

UserCountCursor.each(function (err, doc) {
   if (err)
     console.log("did not get the count");
   else 

     // var countString= JSON.stringify(doc);

     //...

})

do this instead:

UserCountCursor.each(function (err, doc) {
   if (err){
     console.log("did not get the count");
   }else if(doc){ 

     // var countString= JSON.stringify(doc);

     //...

   }

})

Then you will avoid the Cannot read property 'iparkoUserCount' of null error and you'll get into your save() function.