我對passportjs有相對較新的表達,並且有關於我的應用程序體系結構最佳實踐的問題。用戶ES6的商店類實例Nodejs express passportjs
首先,我希望用戶能夠做到以下幾點:
- 本地登錄/註冊(用戶名,密碼)
- 谷歌的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(user-schema)中,然後手動刪除它們。或者,我更願意處理狀態客戶端(例如JWT)。
預先感謝您!
你的問題是什麼? –
對不起,@NaeemShaikh也許我不太確切:在express/node/passport環境中使用用戶相關實例最合理的方法是什麼? – DEls
我會存儲會話中的所有選項,並在每個請求中創建一個新的ImapConnector –