我想创建模块来构建我的 NodeJS 应用程序,但我有点迷茫,而且我还没有找到任何(经过数小时的搜索)完全确定的主题。
假设我想创建一个“用户”模块,我可以使用以下代码在我的代码中创建新用户:
var newUser = new User();
理想情况下,我需要在我的代码顶部使用我的模块,例如:
var User = require('../lib/user');
这很好用。问题是,我应该如何构建用户模块?以下是最好的方法吗?
module.exports = function User() {
var authorized = false;
var username = undefined;
var password = undefined;
var statistics = undefined;
this.authorized = function() {
return authorized;
}
this.username = function() {
return username;
}
this.statistics = function() {
return statistics;
}
}
我正在为我的各种模块变量编写 getter 和 setter,允许我隐藏我不想从其他代码意外访问的东西。但是,我以前这样做过:
function User() {
this.authStatus = false;
this.email;
this.displayName;
this.inSession;
}
User.prototype.isAuthenticated = function() {
return(this.authStatus && this.email && this.displayName)
}
User.prototype.isInSession = function() {
return(this.inSession && this.isAuthenticated());
}
exports.User = User;
这也有效,但有一个警告;我还没有找到从闭包中访问用户属性的方法。如果我的理解是正确的,那么对于第二个实现,我不能。这意味着如果我需要将一个函数作为回调传递给 db 库来编辑用户的属性,我不能。那看起来像:
User.prototype.login = function() {
db.doDbStuff('get user data query', function(_error, _result) {
this.username = _result[0].name; //this code will not work
});
}
据我了解,该代码不起作用,因为“this”关键字在闭包的范围内,而不是用户。即使将代码放置在 User 函数中:
function User() {
this.login = function() { //you know
它行不通。
我想我的问题是,这个问题的最佳解决方案是什么?是我在第一个代码块中介绍的方法吗?这看起来相当麻烦和混乱,并且容易发生可变碰撞。我很害怕。
提前致谢!