简体   繁体   中英

Mongodb doesn't insert item into collection

I have a mongodb database called interview_prac . In interview_prac there is a collection called Users . When a user signs up the username and password are stored in this collection such as {name:_username,password:_password} . I already inserted an item into Users . when I type db.Users.find() I get the following: { "_id" : ObjectId("58a22abd0321b10be42f82ac"), "name" : "reddit", "password" : "1234" }

Now when a user signs up the new users name should be inserted into this collection, however it doesn't happen.

Here is my code:

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

Every time a new user signs up, the shows entry saved and closes the database, which means that the new user should be in my collection. However when I do db.Users.find() . I only get one user, there should be two. I can't seem to figure out why this error occurs.

Mongo 's functions are asynchronous. You're closing the db connection before it has even done any of the code inside your connect callback.

Change your db.close() call inside the insert 's callback.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM