当前位置: 首页 > 知识库问答 >
问题:

未对mongoose架构对象调用save()回调

长孙绍辉
2023-03-14

我试图在我的数据库中保存一个json对象。未调用save()函数,但从未保存json对象。帮我解决这个问题。我想这是猫鼬的连接问题。这是我的密码。。

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

我的控制台日志::

新增用户api命中!!json的内容是: 143没有userrs: 144 db中的用户计数已更新!!这个人生成的id是:ipkoID_C144调用保存函数obj::{"name":"Abhi","密码":"jio","username":"abhijio","phno":"45142545","userId":"ipkoID_C144","_id":"583295bfa0f9f8342035d3b9"}obj创建并准备存储C:\用户##########################################################################################################################################################################################

TypeError:无法读取属性'iparkoUserCount'的空在C:\用户\shivenra\WebstormProjects\iParko\路由\注册ParkingLots.js:76: 57在HandleCallback(C:\用户\shivenra\WebstormProjects\iParko\node_modules\mongob\lib\utils.js:96: 12)在C:\用户\shivenra\WebstormProjects\iParko\node_modules\mongob\lib\cursor.js:742: 16 at handleCallback(C:\用户\shivenra\WebstormProjects\iParko\node_modules\mongob\lib\utils.js:96: 12)at C:\用户\shivenra\WebstormProjects\iParko\node_modules\mongob\lib\cursor.js:676: 5 at handleCallback(C:\用户\shivenra\WebstormProjects\iParko\node_modules\mongob\node_modules\mongob-core\lib\cursor.js:156: 5)在setCursorDeadAndNotify(C:\用户\shivenra\WebstormProjects\iParko\node_modules\mongob\node_modules\mongob-core\lib\cursor.js:496: 3)在nextFunction(C:\用户\shivenra\WebstormProjects\iParko\node_modules\mongob\node_modules\mongob-core\lib\cursor.js:588: 12)在Cursor.next[作为_next](C:\用户\希文德拉\WebstormProjects\iParko\node_modules\mongodb\node_modules\mongodb-core\lib\cursor.js:681: 3)在下一个对象(C:\用户\希文德拉\WebstormProjects\iParko\node_modules\mongob\lib\cursor.js:673: 8)在Cursor.next(C:\用户\shivenra\WebstormProjects\iParko\node_modules\mongodb\lib\cursor.js:262: 12)在_each(C:\用户\shivenra\WebstormProjects\iParko\node_modules\mongodb\lib\cursor.js:738: 10)在C:\用户\shivenra\WebstormProjects\iParko\node_modules\mongodb\lib\cursor.js:746: 7在HandleCallback(C:\用户\shivenra\WebstormProjects\iParko\node_modules\mongodb\lib\utils.js:96: 12)在C:\用户\shivenra\WebstormProjects\iParko\node_modules\mongob\lib\cursor.js:676: 5在HandleCallback(C:\用户\shivenra\WebstormProjects\iParko\node_modules\mongob\node_modules\mongob-core\lib\cursor.js:156: 5)

退出代码1的过程结束

共有2个答案

傅和璧
2023-03-14

UserCountCursor中。每个(…) 循环,在检查err之后,还应该检查doc。那么你有这个:

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

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

     //...

})

改为这样做:

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

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

     //...

   }

})

然后,您将避免无法读取属性'iparkoUserCount'的null错误,并进入save()函数。

赫连棋
2023-03-14

您似乎打开了两次db连接,一次使用mongoose.connect,另一次使用mongoose.connection.open()。这就是为什么你会出错。

尝试使用这个只有一个连接,如下所示。

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();
                    }
                });
          }
    });
 类似资料:
  • 我一直在研究猫鼬文档,但我找不到一种方法来实现我想要做的事情。考虑一个MangGDB用户集合。还可以考虑一个包含DB集合中所有字段的蒙古人用户模式。 现在,我想登录到控制台,所有用户,但属性已更改。有点像: 用户。图例(): 给定的异步类型。find()函数我不确定这是否可以实现。我来自C#和PHP背景,只处理关系数据库,这可以通过在用户类中使用只返回所需值的函数轻松实现。 能做到吗?!

  • 问题内容: 我有一个包裹在另一个里面的物体。“包装器”通过重写从“包装”对象访问属性。直到我需要重写子类上的属性,然后使用来从基类访问该属性之前,此方法都有效。 我仍然可以直接从中访问属性,但是为什么不起作用? 问题答案: 据此, super不允许隐式调用诸如的“ hook”函数。我不确定为什么要用这种方式实现(这可能是一个很好的理由,并且由于超级对象具有自定义和方法,所以事情已经很混乱了),但似

  • 我是MongoDB的新手,我正在用Mongoose创建一个简单的数据库,模型如下:用户、游戏和玩家。 因此,一个用户不包含或包含多个游戏。每个游戏都有一个玩家,每个玩家都指一个用户。如下所示(为了清晰起见,我简化了模式): 因此,现在在前端,我想向后端发送一份请愿书,为用户Joe(_id:11111)和Bob(_id:22222)创建一个新游戏,因此我向/api/games发送了一篇帖子,帖子的主

  • 我有一个叫做玩家的模式和另一个叫做游戏的模式。每个游戏都有一个名为玩家的属性,它是对玩家对象的引用数组。 游戏架构 球员模式 MongoDb连接 用于在post路线上初始化游戏和玩家的代码。(我正在使用Express) 在节点控制台的终端上,当我创建5个播放器时,我有以下输出: 新玩家加入 新玩家加入 新玩家加入 新玩家加入 新玩家加入 现在,当我转到mongo控制台并查看玩家集合时,我发现有5个

  • 是我的第一个问题。我的问题是我想从对象Customer中的Contacts:{type:[contactSchema]数组中获取一个带有_id的对象contact,但我得到的是hole对象Customer。 如果我使用contact.findone我会得到空。

  • 如何验证一个模拟对象根本没有被调用?我正在尝试使用Mockito测试一个接口方法的空实现。