Mongodb不会将项目插入集合中

时间:2017-02-13 23:01:41

标签: javascript node.js mongodb

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

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

这是我的代码:

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 个答案:

答案 0 :(得分:1)

Mongo的函数是异步的。在您db回调中的任何代码完成之前,您正在关闭connect连接。

db.close()的回调中更改insert来电。

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