2016-11-14 79 views
0

我對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)。

預先感謝您!

+0

你的問題是什麼? –

+0

對不起,@NaeemShaikh也許我不太確切:在express/node/passport環境中使用用戶相關實例最合理的方法是什麼? – DEls

+0

我會存儲會話中的所有選項,並在每個請求中創建一個新的ImapConnector –

回答

0

我通常將我的實例存儲在應用程序對象(例如app.db,app.io)上。我也有一些模塊直接導出類的實例,然後在需要時(在服務器啓動過程中)調用module.initialize()。