2016-04-26 76 views
3

我在調用模塊中的方法時遇到問題。方法名稱不是函數

There is an errorTypeError: usr.User.getAddress is not a function

我不知道如何解決這一問題,我認爲我在模塊的代碼有問題。我想獲得地址或結果。

在我main.js

var mysql = require('mysql'); 
var usr = require('./user'); 

    var useraddress = usr.User.getAddress (id,pool); //this is how I access the method 

在我user.js的

exports.User = function() { 

    return { 
     getAddress: function (userid, pool){ 
      pool.getConnection(function (err, connection) { 
       var options = { 
        sql: " select address from user where id = ? 
       }; 

       var querypos = connection.query(options, [userid], function (err, results) { 
        if (err) throw err; 


       }); 

      }); 
     } 
    }; 

}; 

回答

5

要導出User作爲工廠函數與它getAddress方法返回一個對象。所以,你需要調用(實例)User第一:

var useraddress = usr.User().getAddress(id, pool); 

另一個重要的問題。 connection.query請求是異步的,這意味着將getAddress結果分配給var useraddress沒有任何意義。相反,您需要將回撥傳遞到getAddress或使用Promise模式(請查看此主題了解有關主題的大量細節:How do I return the response from an asynchronous call?)。

在你的情況,我認爲這樣的事情會是一個簡單的工作方法:

exports.User = function() { 
    return { 
     getAddress: function (userid, pool){ 
      pool.getConnection(function (err, connection) { 
       var options = { 
        sql: "select address from user where id = ?" 
       }; 

       var querypos = connection.query(options, [userid], function (err, results, callback, errCallback) { 
        if (err) { 
         errCallback(err); 
        } 
        callback(results); 
       }); 
      }); 
     } 
    }; 
}; 

與用法:

usr.User().getAddress(id, pool, function(result) { 
    console.log('Loaded', result); 
}); 
+0

嗨沒有錯誤了,但我的查詢結果不輸出 – jemz

+0

這是因爲'getAddress'是異步的。檢查更新的帖子。 – dfsq

+0

嗨,謝謝你最後一個問題,你怎麼知道這是一個工廠功能? – jemz

1

這是因爲usr.User沒有它.getAddress財產。 要將.getAddress用作屬性,則需要將用戶作爲對象導出。

exports.User = { 
    getAddress: function (userid, pool){ 
     pool.getConnection(function (err, connection) { 
      var options = { 
       sql: " select address from user where id = ? 
      }; 

      var querypos = connection.query(options, [userid], function (err, results) { 
       if (err) throw err; 


      }); 

     }); 
     } 
    }; 
}; 

現在確實如此。

+1

對於一個*有用*的答案,說*你改變了什麼,以及*爲什麼*。你有一半以上的原因,而沒有。 –