方法名称不是函数

时间:2016-04-26 06:31:36

标签: javascript node.js module

我在调用模块中的方法时遇到问题。

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;


                });

            });
        }
   };

};

2 个答案:

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

答案 1 :(得分:1)

这是因为usr.User上没有.getAddress属性。 要将.getAddress用作属性,您需要将User导出为对象。

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;


            });

        });
      }
    };
 };

现在确实如此。