2017-02-13 71 views
0

我有一个名为interview_prac的mongodb数据库。在interview_prac中有一个名为Users的集合。当用户注册用户名和密码存储在此集合中时,如{name:_username,password:_password}。 我已经将一个项目插入Users。当我输入db.Users.find()时,出现以下情况:{ "_id" : ObjectId("58a22abd0321b10be42f82ac"), "name" : "reddit", "password" : "1234" }Mongodb不将项目插入集合

现在,当用户注册新用户名称时应该插入到此集合中,但它不会发生。

这里是我的代码:

router.post('/adduser', function (req, res, next) { 
    var _username = req.body.username; 
    var _password = req.body.password; 
    var url = 'mongodb://localhost:27017/interview_prac'; 

    MongoClient.connect(url, function (err, db) { 
     //if we didn't connect, throw error 
     if (err) 
      throw err; 
     console.log("connected") 

     var users = db.collection('Users') 
      users.findOne({ 
       name: _username 
      }, function (err, user) { 
       if (user) { 
        err = 'The username already exists' 
         res.render('about', { 
          msg: err 
         }) 
       } else { 
        users.insert({ 
         name: _username, 
         password: _password 
        }, function (err, result) { 
         console.log("entry saved") 
         var new_msg = "Welcome " + _username 
          res.render('about', { 
           msg: new_msg 
          }) 
        }) 
       } 
      }) 

      db.close() 
    }) 
    console.log("Database closed") 
}) 

每当一个新的用户注册时,显示entry saved和关闭数据库,这意味着新的用户应该是我的收藏。但是当我做db.Users.find()。我只有一个用户,应该有两个用户。我似乎无法弄清楚为什么会出现这种错误。

回答

1

Mongo的功能是异步的。在connect回调内部完成任何代码之前,您正在关闭db连接。

insert的回调中更改您的db.close()呼叫。

router.post('/adduser', function (req, res, next) { 
    var _username = req.body.username; 
    var _password = req.body.password; 
    var url = 'mongodb://localhost:27017/interview_prac'; 

    MongoClient.connect(url, function (err, db) { 
     //if we didn't connect, throw error 
     if (err) 
      throw err; 
     console.log("connected") 

     var users = db.collection('Users') 
      users.findOne({ 
       name: _username 
      }, function (err, user) { 
       if (user) { 
        err = 'The username already exists' 
         res.render('about', { 
          msg: err 
         }) 
       } else { 
        users.insert({ 
         name: _username, 
         password: _password 
        }, function (err, result) { 
         db.close() 
         console.log("Database closed") 
         console.log("entry saved") 
         var new_msg = "Welcome " + _username 
          res.render('about', { 
           msg: new_msg 
          }) 
        }) 
       } 
      }) 
    }) 
})