私は 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 )。
前もって感謝します!