很确定这是一个相当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
也没有运行。
我不确定为什么会这样。
答案 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);
});
});
}