2017-03-05 1 views
1

Ich evaluiere Loopback für eine neue Plattform, die unser Unternehmen baut. Ich habe ein Testprojekt eingerichtet und bin trotz der Lernkurve absolut begeistert vom Loopback-Framework. Ein Deal-Breaker, den ich nicht verstehen kann, ist, wie man sich auf Anfrage dynamisch mit einer Datenbank verbindet, basierend auf dem Benutzer und dem Kunden, der die Daten anfordert. Unser Altsystem hat eine Datenbank pro Kunde und pro Kundenstandort (ein Kunde mit 3 Standorten hätte insgesamt 4 Datenbanken) und es ist nicht geplant, die Datenstruktur in absehbarer Zeit zu migrieren. Das bedeutet, wenn eine Anfrage gestellt wird, müssen wir uns mit dieser Kundendatenbank verbinden, Daten abrufen und dann trennen.
Jeder Loopback Leute wissen, ob dies möglich ist?Dynamische Datenbankverbindungen basierend auf Benutzer in Loopback

Antwort

1

Betrachten Sie unten in datasources.json

"db1": { 
    "name": "db1", 
    "host": "localhost", 
    "database": "customers_one_db", 
    "password": "", 
    "user": "", 
    "connector": "mysql" 
    }, 
"db2": { 
    "name": "db2", 
    "host": "localhost", 
    "database": "customers_two_db", 
    "password": "", 
    "user": "", 
    "connector": "mysql" 
    } 

eine Middleware wie folgt erstellen:

//middlewares.json 
"inital:after": { 
... 
"./middlewares/dsChanger": {} 
... 
} 

//middlewares/dsChanger.js 
var app = require('../server'); 
module.exports = function(options) { 
    return function(req, res, next) { 
    if(req.headers.customerType === 'blah'){ 
     app.models.Customer.attachTo(app.datasources.db2); 
    }else { 
     app.models.Customer.attachTo(app.datasources.db1); 
    } 
    next(); 
    } 
} 

Haftungsausschluss: ich dies vor

UPDATE

nicht versucht

Für Datenquellen in Code erstellen, können Sie tun:

var DataSource = require('loopback-datasource-juggler').DataSource; 
var mysqlConnector = require('loopback-connector-mysql'); 

var ds1 = new DataSource(mysqlConnector, { 
    host: 'localhost', 
    database: 'customers_one_db', 
    username: '', 
    password: '' 
}); 

Und vergessen Sie nicht eine andere middlware zu erstellen und die letzte Phase Middleware setzen, um disconnect die Datenquelle.

ds1.disconnect(function(err, result){}); 
+0

So ist die datasources.json ein Nicht-Starter, weil ich mit mehreren tausend Datenbanken zu tun habe. Es scheint jedoch, dass Ihre Lösung gut funktioniert, wenn ich eine neue Datenquelle inline erstellen kann (ohne die Datei datasources.json hinzuzufügen). Glaubst du, dass das funktionieren würde? – Zacho

+0

@Zacho Ich aktualisierte meine Antwort –

+0

Vielen Dank @Ebrahim! Ich werde das ausprobieren und die Antwort vollständig markieren, wenn sie es tut (ich bin mir sicher, dass es so sein wird). – Zacho

Verwandte Themen