如何解决mongoose异步造成的数据不同步?

发布于 2022-09-06 02:59:01 字数 1052 浏览 13 评论 0

最近在用mongoose写一些小demo,然后我在需要验证用户名的时候出现了一些问题,代码如下:

router.get('/', function (req, res, next) {
    var userSchema = mongoose.Schema({ //数据格式
        name: String,
        password: String
    })
    var userModel = mongoose.model('userModel', userSchema) //定义数据模型,相当于类
    var user = new userModel({ //指定数据
        name: req.query.name,
        password: req.query.password
    })

    var exist = false

    user.find(function (err, name) { //是否已经存在相同用户名
        if (err) {
            return console.error(err)
        }
        if (req.query.name === name) {
            exist = true
            return
        }
    })

    if (exist === false) { //不存在相同用户名则将用户数据存入数据库
        user.save(function (err, doc) {
            if (err) {
                console.log(`error:${err}`)
            } else {
                console.log(doc)
            }
        })
    }
})

我的想法是将注册界面的用户名发过来,在数据库中验证,如果不存在相同用户名则将新用户名存入数据库。
现在有个问题就是,mongoose是异步的,应该如何获取在进行数据库查找后的exist变量?望指教

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

套路撩心 2022-09-13 02:59:01

不需要exist这个变量。
方法一:在find的回调函数内判断

userModel.find({name: req.query.name}, function (err, _user) { //是否已经存在相同用户名
        if (err) {
            return console.error(err)
        }
        if (_user) { 
            // user存在
            return
        } else {
        // user不存在
            user.save(function (err, doc) {
                if (err) {
                    console.log(`error:${err}`)
                } else {
                    console.log(doc)
                }
            })
        }
    })

方法二: 利用promise

userModel.find({name: req.query.name})
    .then(function(_user){
        if(_user) {
         // user存在
            return
        } else {
        
        // user不存在
            user.save(function (err, doc) {
                if (err) {
                    console.log(`error:${err}`)
                } else {
                    console.log(doc)
                }
            })
        }
    })
当梦初醒 2022-09-13 02:59:01

可以将处理逻辑放在查询函数内,即查询后根据返回值处理是否存入数据库
也可以用callback回调函数。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文