0

我正在尝试完成以下任务(应该是非常基本的,我必须遗漏一些微不足道的东西):

  1. 使用具有 select 语句的字符串调用函数
  2. 等到数据库调用完成并返回行(或等效的 json)
  3. 填充 http 对象以返回

这是代码:

    util.js
exports.execute = function( query){
    if (connection) {
        connection.query(query, function(err, rows, fields) {
            if (err) throw err;
            console.log("from Util - " + JSON.stringify(rows));
            return JSON.stringify(rows);
        });
    }
};

repo.js
var q =  "select * from xxx";
    var response;
    util.execute(q,  function (err,  r){
            if (err){
                throw err;
                console.log(err);
            }
            else {
                console.log(r);
                res.contentType('application/json');
                res.write(r);
                res.end();
            }
        });

我的问题是,当调用 util.js 中的代码并且我可以在控制台中看到 json 时,它永远不会回到 repo.js 中的匿名回调函数。

我在这里做错了什么?

更新

谢谢本,我也在同一行找到了解决方案......这是新代码:

repo.js:
var send_data = function (req, res, r){
    res.contentType('application/json');
    res.write(r);
    res.end();

}
exports.all = function(req, res){
    var q =  "select * from XXX";
    var response;
    util.execute(req, res,q,  send_data);
};

util.js:
exports.execute = function(req, res,  query, callback){
    if (connection) {
        connection.query(query, function(err, rows, fields) {
            if (err) throw err;
            callback(req, res, JSON.stringify(rows))  ;
        });
    }
};
4

1 回答 1

0

util.execute 只接受代码中的一个参数。它需要接受第二个回调参数才能按照您的方式使用它。(回调不是魔术,它们只是函数调用)

就像是:

exports.execute = function(query,callback){
    if (connection) {
        connection.query(query, function(err, rows, fields) {
            if (err) throw err;
            console.log("from Util - " + JSON.stringify(rows));
            callback(null,JSON.stringify(rows));
        });
    }
};

如果您希望它的行为一致并接受错误参数,您可能需要填写:

exports.execute = function(query,callback){
    if (connection) {
        connection.query(query, function(err, rows, fields) {
            callback(err,null);
            console.log("from Util - " + JSON.stringify(rows));
            callback(null,JSON.stringify(rows));
        });
    }
};
于 2013-05-21T00:41:09.853 回答