我正在使用Koa模块-Node js和mysql&遇到了问题。
在注册功能中(在welcomeCtrl.js内部)

var bcrypt = require('bcrypt');
module.exports = {
signup: function* (next) {
 bcrypt.genSalt(10, function(err, salt) {
        console.log(salt);
        bcrypt.hash(password, salt, function(err, hash) {
            // Store hash in your password DB.
            console.log(hash); //no error
            var hashedPassword = hash;
        });
       });
        console.log(bcrypt.hash.hash); //gives error
             //or
        console.log(bcrypt.hash.hahedPassword); //gives error

        queryString = "insert into user(email,name, phone, password, course_id, dpt_id) values('%s','%s','%s','%s','%s','%s')";
        query = util.format(queryString, email, name, phone, hash, courseId, dptId);
        results = yield databaseUtils.executeQuery(query);
        this.redirect('/');
    }
   }


我在不同的route.js文件中调用注册发布功能,如下所示:

router.post('/signup', welcomeCtrl.signup);


这是databaseUtils.js文件中的executeQuerry函数

 var executeQuery = function(query, callback) {
 pool.getConnection(function(err, connection) {
    // Use the connection
    connection.query(query, function(err, rows, fields) {
        connection.release();
        if(err) {
            err.mysqlQuery = query;
            logger.logError(err);
        }

        if(typeof callback == "function") {
            callback(err, rows);
        }
        // Don't use the connection here, it has been returned to the pool.
    });
});
};
 module.exports = {
executeQuery: thunkify(executeQuery),
executePlainQuery: executeQuery
};



  有什么方法可以在函数外部使用哈希变量,以便可以将其插入查询中?

最佳答案

您应该将查询函数移到bcrypt.hash的回调中。

bcrypt.genSalt(10, function(err, salt) {
      console.log(salt);

      bcrypt.hash(password, salt, function(err, hash) {
        // Store hash in your password DB.
        console.log(hash); //no error
        queryString = "insert into user(email,name, phone, password, course_id, dpt_id) values('%s','%s','%s','%s','%s','%s')";
        query = util.format(queryString, email, name, phone, hash, courseId, dptId);

        databaseUtils.executeQuery(query, function() {
          this.redirect('/');
        });
      });
    });


问题是您的redirect函数从哪里来?除非绑定功能,否则将在this上释放上下文。粗箭头功能在您的设置中有效吗?如果是这样,您可以这样做。

关于node.js - 无法在函数外使用变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45188002/

10-09 20:14
查看更多