expressjs: è una cattiva pratica usare req.hostname per interrogare un db?

0

Sto costruendo una app nodejs che vorrei rendere disponibile sotto varie impostazioni dai miei clienti. Voglio che i miei clienti costruiscano i loro siti web sulla mia app, quindi:
 - l'app può essere configurata in modo che i domini "A.com" e "B.com" utilizzino la configurazione "X" dell'app, mentre "C.com" utilizza "Y", ecc.
 - Sto pensando di usare i contenitori Kubernetes e Dockers per isolare la versione "X", "Y" ecc della mia app  - Sto anche pensando di usare nginx per reverse-proxy

Ogni dominio avrà i suoi documenti distinti in una collezione mongodb. Perché ho bisogno di un modo per recuperare i dati giusti, sto dando a ciascun dominio un token unico che corrisponda ai loro documenti. Tutti i token vengono anche salvati in mongodb e verranno recuperati all'avvio o aggiornati del mio server (nodejs) al volo. I token verranno salvati su una variabile "app.locals":
 - Sto pensando di avere un middleware che grap il dominio da ogni richiesta (req.hostname) e ottenere il token corrispondente

// set locals
app.locals.domainTokens = {};

dopo aver recuperato e assegnato i token, "domainTokens" avrà il seguente aspetto:

app.locals.domainToken = {
    "Acom" : "token_1",
    "Bcom" " "token_2"   // and so on
}

// the middleware
function grabToken(req, res, next) {
    var tokens = app.locals.domainToken,
        host = req.hostname;
    req.params.token = host ? tokens[host] : undefined;
    next();
}

Quando i nuovi clienti si registrano, i token saranno assegnati al volo per il loro dominio (i contenitori parlano tra loro, giusto?).

Quindi, in pratica, quando viene effettuata una richiesta per "A.com", il mio middleware imposta il "token" in modo che i documenti mongodb relativi a "A.com" possano essere trovati e inviati al client con la versione "X" in esecuzione della mia app (nginx).

Cosa ne pensi di questo approccio? è pericoloso? una cattiva pratica? hai un suggerimento migliore per implementarlo?
Sto meglio usando un container per dominio? (Dovrei monitorare centinaia di istanze di nodejs invece di 3 o 4)

Inoltre, è possibile configurare dinamicamente un server Nginx?

    
posta Fabrice K. 14.11.2015 - 20:36
fonte

1 risposta

0

Ho un problema molto simile con la distribuzione della nostra API. Penso che questa soluzione diventi ingombrante abbastanza velocemente dato che il tuo codice ora contiene informazioni specifiche sulla distribuzione. Si sta tentando di avere il codice auto-configurarsi in questo modo, ma penso che lo renda più difficile di quanto non debba essere.

Nel mio caso, ho scelto di separare informazioni simili in un file di configurazione. Questo ha diversi vantaggi:

  1. È più in linea con la maggior parte degli altri software utilizzati dagli utenti per l'installazione e la configurazione.
  2. Qualcuno può amministrare l'installazione senza toccare (o avere accesso) al codice (e anche nel tuo caso il database).
  3. Sarà molto più facile eseguire il deployment delle installazioni / configurare nuovi ambienti.
risposta data 15.11.2015 - 03:56
fonte

Leggi altre domande sui tag