我对使用 express 的passportjs比较陌生,并且对我的应用程序架构的最佳实践有疑问。
首先,我希望用户能够执行以下操作:
- 本地登录/注册(用户名、密码)
- 谷歌 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 auth 的凭据。这样,实例与即将到期的会话一起。
但是,我不确定这是否是最好的也是唯一的方法。
因此,我的问题是:利用这些与用户相关的实例最合理的方法是什么?
我还可以考虑将这些实例保存在我的 mongodb(用户模式)中,然后手动删除它们。或者,我更喜欢处理状态客户端(例如JWT)。
先感谢您!