0

我正在构建一个用户注册和 crud 应用程序。我有一个数据库模型。

var valid;
module.exports = {
    connectDB: function(){
    }
    ,
    findUser: function(req,res) {
    }
    ,
    createUser: function(email,name,password){
        var role = 'view';
        var sql = "INSERT INTO `users`(email, name, password, role) VALUES (" +  "'"+email+"'"+","+"'"+name+"'"+","+"'"+password+"'"+","+"'"+role+"'"+")";
        db.query(sql, function(err, result){
            if(err){
                console.log(`FAILED: ${err}`)
                return false; // tried setting valid to false
            }
            else
            {
                console.log(`User Created`);
                valid = true;

            }
        });
       return valid; // this also returns undefined 
    }
}

我希望能够根据查询的连续性返回一个布尔值。我尝试返回真/假。我做了一些搜索为什么会发生这种情况。首先有一个关于 js 是异步的解释。我的问题是在导出时返回函数中的值以便我可以使用它的正确方法是什么?

4

1 回答 1

0

通过使用承诺

    createUser: function(email,name,password){
        return new Promise(function(resolve,reject){
            var role = 'view';
            var sql = "INSERT INTO `users`(name, password, role) VALUES (" +  "'"+email+"'"+","+"'"+name+"'"+","+"'"+password+"'"+","+"'"+role+"'"+")";
            db.query(sql, function(err, result){
                if(err){
                    console.log(`FAILED: ${err}`)
                    reject(err);
                }
                else
                {
                    console.log(`User Created`);
                    resolve();
                }
            });
        })
    }

我们现在可以像这样使用 createUser ;

 db.createUser(email,name,password).then(function(){
    console.log('redirect');
    res.redirect('/');
  }).catch(function(){
    console.log('something went wrong');
    res.render('signup', { message: 'something went wrong' })
  });
于 2019-12-08T05:15:03.557 回答