用户ES6 Nodejs的商店类实例表示passportjs

时间:2016-11-14 11:03:09

标签: node.js express ecmascript-6 passport.js es6-class

我对passportjs表示相对较新,并对我的应用程序架构的最佳实践提出疑问。

首先,我希望用户能够执行以下操作:

  • 本地登录/注册(用户名,密码)
  • Google OAuth

其次,我想在用户拨打电话时重用ES6-class的实例。

示例:

class ImapConnector { 

  constructor(options) {
     this.options = options;
     this.imap = new IPromise(options);
  }

  connect() {
     return this.imap.connectAsync();
  }

  getBoxes() {
     return this.connect().then(() => new Promise((resolve, reject) => {
        this.imap.getBoxes((err, boxes) => {
           err ? reject() : resolve(boxes);
        });
     }));
  }

}

控制器

function getBoxes(req, res) {
   const options = {
      user: req.user.email,
      password: req.user.password,
      host: req.user.email.host,
      port: req.user.email.port,
      tls: true,
      mailbox: 'INBOX'
   };
   const imapConnector = new ImapConnector(options);
   imapConnector.getBoxes().then((boxes) => {
      res.status(200).send(boxes);
   });
}

如您所见,来自控制器的调用当前正在创建ImapConnector类的实例,该实例仅用于控制器函数的范围内。显然,这是一种非常浪费的记忆方法。

现在,我的想法是在快速用户会话中创建和存储实例,因为实例绑定到用户选项,例如imap auth的凭据。这样,实例与即将到期的会话一起。

然而,我不确定这是否是最佳和唯一的方法。

因此,我的问题是:使用这类用户相关实例的最合理方法是什么?

我还可以考虑在我的mongodb(用户架构)中持久保存这些实例,然后手动删除它们。或者,我更愿意处理状态客户端(例如JWT)。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

我通常将我的实例存储在应用程序对象上(例如,app.db,app.io)。我还有一些直接导出类实例的模块,然后在需要时调用module.initialize()(在服务器启动期间)。