jem*_*emz 3 javascript module node.js
我在调用模块中的方法时遇到问题.
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
Run Code Online (Sandbox Code Playgroud)
在我的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;
});
});
}
};
};
Run Code Online (Sandbox Code Playgroud)
您将导出User为工厂函数,该函数返回带有getAddress方法的对象.所以你需要先调用(实例化)User:
var useraddress = usr.User().getAddress(id, pool);
Run Code Online (Sandbox Code Playgroud)
另一个重要问题.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);
});
});
}
};
};
Run Code Online (Sandbox Code Playgroud)
和用法:
usr.User().getAddress(id, pool, function(result) {
console.log('Loaded', result);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |