很确定这是一个相当新手的 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/