0

私は Express を使用したPassportjsに比較的慣れておらず、アプリケーションのアーキテクチャのベスト プラクティスについて質問があります。

まず、ユーザーが次のことを実行できるようにします。

  • ローカル ログイン/登録 (ユーザー名、パスワード)
  • Google OAuth

次に、ユーザーが呼び出しを行うたびにES6 クラスのインスタンスを再利用したいと考えています。

例:

クラス

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認証の資格情報などのユーザーオプションにバインドされているため、インスタンスを高速ユーザーセッションで作成して保存することです。そうすれば、インスタンスは期限切れのセッションと一緒になります。

ただし、それが最善かつ唯一の方法であるかどうかはわかりません。

したがって、私の質問は次のとおりです。これらの種類のユーザー関連のインスタンスを利用するための最も合理的なアプローチは何ですか?

これらのインスタンスを mongodb (ユーザー スキーマ) に永続化してから、手動で削除することも考えられます。必要に応じて、状態をクライアント側で処理することをお勧めします (例: JWT )。

前もって感謝します!

4

1 に答える 1