2013-07-22 132 views
0

我在mysql.js作爲回報功能:如何調用該函數節點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,我得到錯誤。

+0

您是否正在導出myFunction?即:module.exports.myFunction = myFunction; – dc5

+0

實際上,我需要將結果發送到api調用,作爲restservice.js的響應,而不是來自mysql.js。好心的建議我解決方案 – Prem

回答

1

如果mysql.myFunctionundefined,那麼你很可能沒有真正將其導出:

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

exports.myFunction = myFunction; 

函數和變量聲明爲「私人」到模塊默認。只有您明確導出的成員才能從其他模塊訪問。


您也將無法使用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); 
    } 
); 
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); 
} 

更新 - 刪除,我錯過了周圍第一次返回行的語句。

+0

謝謝dc5。但是當我運行上面的腳本,我得到的行沒有定義 – Prem

+0

嘗試console.log(行)從您的response.query回調。那裏記錄什麼? – dc5

+0

@Prem - 我不小心在代碼中留下了返回行語句。這是擺脫你的行未定義的錯誤? – dc5