要执行的Connection.query

时间:2014-05-25 18:33:17

标签: javascript node.js node-mysql

很确定这是一个相当noobish node.js / callback的问题,但我似乎无法找到合适的代码让它运行。

这是我调用node-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(connection);没有显示任何内容,当然connection.query也没有运行。

我不确定为什么会这样。

1 个答案:

答案 0 :(得分:1)

在回调中返回值是没有意义的。您需要传入一个使用您想要返回的值调用的回调:

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()中,您的错误this。它应该是类似的东西:

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