首页 > 解决方案 > 返回未定义值的方法

问题描述

router.post("/register",validator.validate("createUser"), function(req,res){
   const register = User({
            fullname:fullname,
            contact:contact,
            email:email,
            password:bcrypt.hashSync(password, salt),
            role:check_user.if_user_exists()
        })
        register.save()    
 } 

下面的代码来自 check_user.js 文件

exports.if_user_exists= function(){
     User.findOne({role:"Admin"},function(err,data){
            if(data){
                console.log("Inside User"+data)                
                return "User"
            }else{                
                console.log("Inside Admin"+data)                
                return "Admin"
            }
    }) 
}

所以我面临的问题是,保存记录时角色值未定义,我认为问题在于它没有等待函数返回值。请帮助我如何获取方法值

标签: node.jsmongodb

解决方案


将功能更改if_user_exists为此。

exports.if_user_exists = function () {
    return new Promise((resolve, reject) => {
        User.findOne({ role: "Admin" }, function (err, data) {
            if (err) reject(err)
            if (data) {
                console.log("Inside User" + data)
                return resolve("User")
            } else {
                console.log("Inside Admin" + data)
                return resolve("Admin")
            }
        })
    })
}

然后将保存逻辑更改为此。

router.post("/register", validator.validate("createUser"), async function (req, res) {
    let role = await check_user.if_user_exists()
    const register = User({
        fullname: fullname,
        contact: contact,
        email: email,
        password: bcrypt.hashSync(password, salt),
        role
    })
    register.save()
})

推荐阅读