javascript - 要执行的 Connection.query

标签 javascript node.js node-mysql

很确定这是一个相当新手的 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) 记录查询以来,执行部分的代码变得正常。但之后,代码没有运行,console.log(connection); 没有显示任何内容,当然 connection.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() 中,您的 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);
        });
    });
}

关于javascript - 要执行的 Connection.query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23858624/

相关文章:

node.js - 运行 node-mysql 教程时出错

node.js - 在与 node-mysql 的现有连接中更改数据库的推荐方法

javascript - 我想将每个单选按钮重置为未选中状态,但我的代码不起作用

node.js - 如何从 Mongoose 查询返回值

mysql - 何时在 Node 中初始化 mysql 连接

node.js - 如何为第 3 方库将 ES6 转换为 ES5?

javascript - NodeJS 包依赖

javascript - Node.js 将相同的可读流输送到多个(可写)目标中

javascript - AWS Javascript SDK 中回调函数的返回值

c# - 带有javascript确认功能的必填字段验证器未验证