2017-04-04 3 views
0

Ich habe einen Back-End-Dienst, den ich als einen einzigen Einstiegspunkt für meine Web-Anwendung verwenden möchte, und erstelle dynamisch einen Datenbankpfad basierend auf der Benutzeranmeldung. Ich weiß, dass dies keine skalierbare Lösung ist. Ich beabsichtige, es während einer Testphase mit mehreren Clients zu verwenden (Zugriff auf die ALPHA-Datenbank) und auch eine Demo einzurichten (Zugriff auf die SAND-Datenbank). Ich habe folgendes Modul, das ich als einfacher Test geschrieben haben, um zu sehen, ob die Anmeldung für den Demo-Benutzer ist, werden alle anderen Logins auf die andere Ressource gehen:Wie kann ich einen Datenbankpfad in Express.js basierend auf dem Login dynamisch zuweisen?

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; 
    } 
}; 

Meine Frage ist, Wie kann ich jede eindeutige Anmeldung verwalten und eine global zugängliche Referenz für diese Sitzung zuweisen, um jede Benutzersitzung konsistent in die richtige Datenbank zu leiten? Übertreibe ich das? Wenn es einen anderen Ansatz gibt, der eine bessere Praxis wäre, würde ich einen Vorschlag in eine andere Richtung begrüßen.

Antwort

1

würde ich es als Middleware zu verwenden, und fügen Sie es an die req Objekt für jeden Benutzer, etwas Ähnliches dies:

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

Dies ist für die Anmeldung sinnvoll erscheint, aber was ist der Ansatz für nachfolgende Anrufe? Wäre es sicher, ein privates Objekt in diesem Modul zu erstellen, das für jede Anmeldung ein k: v-Paar enthält, wobei der Schlüssel das Sitzungstoken ist und der Wert der DB-Pfad ist? Ich möchte sicherstellen, dass ich nicht versehentlich ein Sicherheitsloch erstelle. – espressoAndCode

+0

Ich sehe nicht, wie ein k: v-Paar auf dem 'req'-Objekt ein Sicherheitsloch ist. (Tun Sie es nicht auf dem 'res' Objekt). –

Verwandte Themen