Ich habe eine node.js + Express-App. Ich verwende Passport für die Benutzeranmeldung. Es gibt eine Systemeinstellungstabelle in meiner Datenbank, die ich auslesen möchte, wenn sich ein Benutzer erfolgreich anmeldet und dann lokale app.locals.setting_name-Variablen daraus erstellt, die während der Lebensdauer der Anwendung verwendet werden.Node.js Express-App einfügen app.local.setting nur einmal beim Einloggen
Die Einstellungstabelle enthält die Spalten Name und Wert, die den Einstellungsnamen und den entsprechenden Wert darstellen. So etwas wie: Name - SUPPORT_EMAIL und Value - [email protected], als ein Beispiel.
So würde ich app.locals.SUPPORT_EMAIL Wert gesetzt als [email protected]
Hier ist der Code Ich habe bisher:
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;
}
});
});
}
Es gibt jedoch zwei Probleme, denen ich gegenüberstehe:
1) Die app.use ruft den Einstellungscode jedes Mal auf, wenn ich auf eine neue Seite gehe. Ich möchte nur, dass dieser Code nur einmal aufgerufen wird, wenn der Benutzer sich anmeldet.
2) Die app.locals sind nicht festgelegt. Wenn ich eine Debug-App mache. Locals.SUPPORT_EMAIL als undefiniert.
Irgendwelche Vorschläge oder Ideen, wie dies verbessert werden kann?
danke für die Lösung. Ich werde App.locals.SETTING_NAME verwenden, da diese Einstellungen während der Laufzeit der App verwendet werden. Eine andere Sache, die ich fragen wollte, war, gibt es eine Grenze für die Anzahl der app.locals, die wir tun können? Ursache Einige der Zeilen, die ich in lokalen Speichern speichern möchte, werden als nicht definiert angezeigt. Auch wenn ich sie wie app.locals.mysetting = 'hallo' und später console.log (app.locals.mysetting) fest codiere; es kommt wie undefiniert. Irgendeine Idee? – codeinprogress