我有一個node.js + Express應用程序。我正在使用Passport進行用戶登錄。我的數據庫中有一個系統設置表,我想在用戶成功登錄後讀取它,然後從它創建app.locals.setting_name局部變量,這些變量將在應用程序的生命週期中使用。Node.js Express應用程序只在登錄時插入app.local.setting一次
設置表具有名稱和值列,表示設置名稱及其對應的值。例如:Name - SUPPORT_EMAIL和Value - [email protected]作爲示例。
所以我會app.locals.SUPPORT_EMAIL值設置爲[email protected]
這裏是我的代碼至今:
app.js
var settingsObj = require('./config/appSettings.js');
app.use(function(req, res, next) {
...
...
settingsObj.getApplicationSystemSetting(req.user, app);
next();
});
appSettings.js
exports.getApplicationSystemSetting = function() {
connectionPool.getConnection(function(err, connection){
connection.query('select Name, Value from SystemSettings', function(err, rows){
if(err) {
winston.log('info', '--------------------- ERROR: ' + err);
return;
}
console.log('-------------- settings: ' + JSON.stringify(rows));
for(var i = 0; i < rows.length; i++) {
var setting = rows[i];
app.locals.setting.Name = setting.Value;
}
});
});
}
然而,有兩個問題,我面對:
1)app.use調用設置代碼,我每次去到一個新的頁面時。我只想在用戶登錄時僅調用一次此代碼。
2)未設置app.locals。如果我做一個調試app.locals.SUPPORT_EMAIL爲未定義。
有關如何改進的建議或想法?
感謝您的解決方案。我實際上要使用app.locals.SETTING_NAME,因爲這些設置將在應用程序的生命週期中使用。我想問的另一件事是,我們可以做的app.locals數量是否有限制?導致我嘗試在本地存儲的某些行未定義。即使我將它們硬編碼爲app.locals.mysetting ='hello'並稍後console.log(app.locals.mysetting);它來自未定義。任何想法? – codeinprogress