使用init方法的简单node.js模块

时间:2013-03-23 18:20:29

标签: javascript node.js

我正在尝试使用init方法为node.js找到一个很好的简单模式,以便在连接到mongodb集合时使用'models'。基本上,每个系列都有一个“模型”。

这就是我所拥有的,设置为单身,任何不使用此方法的原因,或者在节点的上下文中是否有更多推荐的方法?

module.exports = User;

function User () {

  if ( arguments.callee.instance ) {
    return arguments.callee.instance;
  } else {
    arguments.callee.instance = this;
  }

  //Init our database collection

}

User.findOne = function (user_id) {

}

User.addUser = function () {

}

return new User();

谢谢!

1 个答案:

答案 0 :(得分:1)

嗯,你应该把User.prototype.method。

User.prototype.findOne = function (user_id) {

}

User.prototype.addUser = function () {

}

而不是'返回新用户()',你可能意味着,

module.exports = new User();

导出“新”User()的的一个原因是,如果要在nodejs程序中创建多个用户。如果你只有一个用户,那么单身就可以了。此外,如果要将数据传递给此模块,您可能希望通过构造函数参数执行此操作,如果只在模块中构造用户,则无法传递到应用程序中的构造函数。

我使用的模式将module.exports分配给一个函数。我所有导出的第一个参数是在所有导出中共享的对象,因此他们可以添加事件/侦听器并以各种不同的方式相互通信。

例如('events'和'app'是伪造的,不是基于任何真正的API),

function doLogin(app) {
    return function (e) {
        // some code to do login
    }
}
module.exports = function login (app) {
    app.events.on('login', doLogin(app));
}

现在所有其他模块都可以通过

触发登录
app.events.login({'user': '..','pass': '..'});