无法在函数外使用variables

我正在使用Koa模块 – 节点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('/'); } } 

我在不同的routes.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 }; 

有什么办法可以在函数外部使用哈希variables,以便它可以插入查询?

您应该将查询函数移到bcrypt.hash的callbackbcrypt.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('/'); }); }); }); 

问题是,你的redirectfunction从哪里来? 除非你绑定了这些函数,否则你会放松this环境。 胖箭头function在你的设置中工作吗? 如果是的话,你可以这样做。