2017-04-04 31 views
0

我有一個後端服務,我想將其用作我的Web應用程序的一個入口點,並根據用戶登錄名動態分配數據庫路徑。 我意識到這不是一個可擴展的解決方案。我打算在測試期間與幾個客戶端(訪問ALPHA數據庫)一起使用它,並設置演示(訪問SAND數據庫)。 我有我寫了一個簡單的測試,看看如果登錄的演示用戶提供以下模塊,所有其它登錄必去的其他資源:如何根據登錄名在Express.js中動態分配數據庫路徑?

config.js

var express   = require('express'); 
var app    = express(); 

module.exports.dbPath = function (login){ 
    console.log('login - ', login); 
    if (login === '[email protected]'){ 
     return process.env.DB_SAND; 
    } else { 
     return process.env.DB_ALPHA; 
    } 
}; 

我的問題是,我如何管理每個唯一的登錄併爲該會話分配全局可訪問的引用,以將每個用戶會話始終指向正確的數據庫? 我是否過度複雜?如果有一種更好的做法,我會歡迎另一個方向的建議。

回答

1

我會用它作爲一箇中間件,它連接到req對象爲每個用戶,類似這樣:

module.exports = { 
    dbPath: function(req, res, next){ 
     var login = req.body.login; 
     console.log('login - ', login); 
     if (login === '[email protected]'){ 
      req.dbPath = 'DB_SAND'; 
     } else { 
      req.dbPath = 'DB_ALPHA'; 
     } 
     next(); 
    } 
}; 
+0

這似乎是合理的登錄,但什麼是後續調用的方法嗎?在模塊中創建一個私有對象,爲每次登錄都保留一對k:v對,密鑰是會話令牌,值是數據庫路徑嗎?我想確保我不會無意中造成安全漏洞。 – espressoAndCode

+0

我不明白'req'對象上的k:v對是一個安全漏洞。 (不要在'res'對象上做)。 –