2016-04-26 8 views
3

私のモジュールでメソッドを呼び出す際に問題があります。メソッド名が関数ではありません

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

私はこの問題を解決する方法がわからない私は、私は私のモジュールコードに問題があると思います。私は住所か結果を得たいと思う。私のuser.jsの中

私main.jsで

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

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

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

あなたはそれにgetAddressメソッドを持つオブジェクトを返すファクトリ関数としてUserを輸出しています。だから、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

こんにちは、最後の1つの質問ありがとう、どのように工場の機能であることを知ったのですか? – 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

*役に立つ*回答については、*あなたが変更したもの、*なぜ*あなたは上記の理由の半分、そして何のものも持っていません。 –

関連する問題