2017-02-13 73 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 
          }) 
        }) 
       } 
      }) 
    }) 
})