如何在节点js中调用该函数

时间:2013-07-22 21:32:42

标签: node.js

我已将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是Undefined而得到错误。

2 个答案:

答案 0 :(得分:1)

如果mysql.myFunctionundefined,那么您可能实际上并未将其导出:

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

exports.myFunction = myFunction;

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


您也无法使用return rows;。异步代码是事件驱动的,不会等待return需要它。

myFunction已经有一个callback参数,您正在为该值传递function。你只需要打电话:

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

连接时也至少应该escape resourceIdentifiers

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

response.query(
    'call SP_ExposePricingDetailforUI(?)',
    [ resourceIdentifiers ],
    function (err, rows, fields) {
        callback(err, rows);
    }
);

答案 1 :(得分: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);
}

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