我对passportjs表示相对较新,并对我的应用程序架构的最佳实践提出疑问。
首先,我希望用户能够执行以下操作:
其次,我想在用户拨打电话时重用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)。
提前谢谢!
答案 0 :(得分:0)
我通常将我的实例存储在应用程序对象上(例如,app.db,app.io)。我还有一些直接导出类实例的模块,然后在需要时调用module.initialize()(在服务器启动期间)。