0

我已将 mysql.js 中的函数返回为:

function myFunction(resourceIdentifiers,callback){

    dbconnection.execute( function(err,response) {

        response.query('call SP_ExposePricingDetailforUI(' 
                                      + resourceIdentifiers + ')'
                      ,function (err, rows, fields) {
                          console.log(rows);
                      });
                 }
        );
        return rows;            
}

并尝试在另一个脚本文件 restservice.js 中调用它:

mysql.myFunction(resourceIdentifiers , function(err,rows) {
    console.log(rows);
}

但是我得到错误,因为函数 myFunction 是未定义的。

4

2 回答 2

1

如果mysql.myFunctionis undefined,那么您可能实际上并没有导出它:

function myFunction(resourceIdentifiers, callback){
    // ...
}

exports.myFunction = myFunction;

默认情况下,函数和变量声明对模块是“私有的”。只有您明确导出的那些成员才能从其他模块访问。


您也将无法return rows;按照您的尝试使用。异步代码是事件驱动的,不会等待,这return需要它来做。

myFunction已经有一个callback参数,你正在传递一个function值。你只需要调用它:

// ...
function (err, rows, fields) {
    callback(err, rows);
}
// ...

连接时您至少也应该转义resourceIdentifiers

但是,通常更好的是使用占位符 ( ?) 和可选的第二个参数.query()

response.query(
    'call SP_ExposePricingDetailforUI(?)',
    [ resourceIdentifiers ],
    function (err, rows, fields) {
        callback(err, rows);
    }
);
于 2013-07-22T21:47:10.763 回答
0

您只需要在 response.query 的结果中回调。像这样的东西。

mysql.js:

function myFunction(resourceIdentifiers,callback){

    dbconnection.execute( function(err,response) {

        response.query('call SP_ExposePricingDetailforUI(' 
                                      + resourceIdentifiers + ')'
                      ,function (err, rows, fields) {
                          callback(err, { rows: rows, fields: fields});
                      });
                 }
        );
}

module.exports.myFunction = myFunction;

restservice.js:

mysql.myFunction(resourceIdentifiers , function(err,resp) {
    console.log(resp.rows);
}

更新 - 删除了我第一次错过的返回行语句。

于 2013-07-22T21:48:04.660 回答