Имя метода не является функцией
У меня проблема с вызовом метода в моем модуле.
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 ответа
Вы экспортируете User
как фабричная функция, которая возвращает объект с getAddress
метод на это. Так что вам нужно вызвать (создать экземпляр) User
первый:
var useraddress = usr.User().getAddress(id, pool);
Еще одна важная проблема. connection.query
запрос асинхронный, что означает, что присвоение результата getAddress var useraddress
не имеет смысла. Вместо этого вам нужно либо передать обратный вызов getAddress
или используйте шаблон Promise (проверьте этот пост для получения более подробной информации по теме: Как вернуть ответ от асинхронного вызова?).
В вашем случае, я думаю, что-то вроде этого было бы самым простым рабочим подходом:
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);
});
Это потому что 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;
});
});
}
};
};
Теперь это так.