Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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
Javascript 要执行的Connection.query_Javascript_Node.js_Node Mysql - Fatal编程技术网

Javascript 要执行的Connection.query

Javascript 要执行的Connection.query,javascript,node.js,node-mysql,Javascript,Node.js,Node Mysql,非常确定这是一个非常noobish node.js/callback的问题,但我似乎找不到合适的代码来运行它 这就是我调用我的节点mysql代码的方式: var utils = require('../../config/database/utils'); exports.getResults = function(callback) { var query = "SELECT * FROM my_table"; utils.exec(query, null, function

非常确定这是一个非常noobish node.js/callback的问题,但我似乎找不到合适的代码来运行它

这就是我调用我的
节点mysql
代码的方式:

var utils = require('../../config/database/utils');

exports.getResults = function(callback) {   
  var query = "SELECT * FROM my_table"; 
  utils.exec(query, null, function(err, results){
    if(err){
      console.log(err);
      callback(true);
      return;
    }
    console.log(results);
    callback(false, results);
  });
};
接下来是utils文件,我无法在其中运行代码

var pool = require('./connection');

module.exports = {
getDBConnection: function() {
    pool.getConnection(function(err, connection){
        if(err){
            console.log(err);
            return;
        }
        return connection;
    });
},
endDBConnection: function(connection) {
    connection.end(function (err) {
        if(err) {
            console.log(err); 
            callback(true); 
            return; 
        }   
    });
},
exec: function(query, data, callback) {
    console.log(query);
    this.getDBConnection(function(err, connection){
        if(err){
            console.log('error');
        }
        console.log(connection);
        connection.query(query, data, function(err, results) {
            if(err) {
                callback(err);
            }
            callback(false, results);
        });
        this.endDBConnection(connection);
    });
}
}
由于console.log(query)记录了查询,因此exec部分的代码变得正常。但是在那之后,代码没有运行,
console.log(连接)
没有显示任何内容,当然,
连接.query
也没有运行


我不知道为什么会发生这种情况。

在回调中返回值是没有意义的。您需要传入一个回调,该回调将使用要返回的值进行调用:

getDBConnection: function(callback) {
    pool.getConnection(function(err, connection){
        if(err){
            console.log(err);
            return callback(err);
        }
        callback(null, connection);
    });
},
您还应该使用
connection.release()
而不是
connection.end()
,因为您使用的是池:

endDBConnection: function(connection) {
    connection.release();
},
exec()
中,此
错误。它应该是这样的:

exec: function(query, data, callback) {
    console.log(query);
    var self = this;
    this.getDBConnection(function(err, connection){
        if(err){
            console.log('error');
            return callback(err);
        }
        console.log(connection);
        connection.query(query, data, function(err, results) {
            self.endDBConnection(connection);
            if(err) {
                return callback(err);
            }
            callback(null, results);
        });
    });
}

你让我的星期天更快乐了。非常感谢您的回答,也感谢您澄清了某些要点。