Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 无法在函数外部使用变量 我使用膝关节炎模块——Node js和MySQL,坚持一个问题。_Node.js_Koa - Fatal编程技术网

Node.js 无法在函数外部使用变量 我使用膝关节炎模块——Node js和MySQL,坚持一个问题。

Node.js 无法在函数外部使用变量 我使用膝关节炎模块——Node js和MySQL,坚持一个问题。,node.js,koa,Node.js,Koa,在注册函数(在welcomeCtrl.js中)中,我有: 我正在调用不同routes.js文件中的signup post函数,如下所示: router.post('/signup', welcomeCtrl.signup); 下面是databaseUtils.js文件中的executeQuery函数 var executeQuery = function(query, callback) { pool.getConnection(function(err, connection) {

在注册函数(在welcomeCtrl.js中)中,我有:

我正在调用不同routes.js文件中的signup post函数,如下所示:

router.post('/signup', welcomeCtrl.signup);
下面是
databaseUtils.js
文件中的
executeQuery
函数

 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
};

有没有办法在函数外部使用hash变量,以便将其插入查询中?

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

问题是,
重定向
函数从何而来?除非绑定函数,否则您将在
上释放上下文。胖箭头功能在您的设置中有效吗?如果是这样的话,您也可以这样做。

我也尝试过,但它在results=yield databaseUtils.executeQuery(query)之后抛出错误-意外,(逗号);您是否真的设置为使用
产量
?如果不是这样的话,你可能应该回到传统的承诺上来。我会更新我的答案。是的,
yield
都设置好了&有时我会使用yield this.render来呈现一些html页面,在这种情况下,no.
results=yield databaseUtils.executeQuery(查询)。然后(function(){,“^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^,“,”,“,“语法错误:意外标识符”,“at-createScript
-再次出错啊,我没有看到您的
注册是一个生成器。因为您使用的是bcrypt中的回调函数,您可能需要类似的东西来使用它们。
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('/');
        });
      });
    });