Come montare le sotto-app express.js?

Ho diverse app che sto cercando di unire in una singola “suite”: 2 app sono standalone, una è semplicemente un auth layer (usando everyauth per FB Connect). Voglio configurarlo in questo modo:

  • / – (home) elenco delle app
  • / auth – accedi per qualsiasi app
  • / app1: richiede l’accesso tramite / auth per l’accesso
  • / app2 – (stesso)

Ho pensato di lasciare app1 e app2 standalone, con il livello superiore come proxy, ma penso che sarebbe difficile condividere un sistema di autenticazione tra loro. Virtualhosts (tramite Connect) potrebbe funzionare, ma non necessariamente voglio un sottodominio DNS per ciascuno. Quindi preferirei che l’app principale fosse il livello auth, e gli altri “montassero” quello, con il basepath impostato su ogni app su un sotto-percorso. (Basepath è menzionato nella guida rapida ma non è ben documentato.)

Tutti usano MongoDB, il livello auth usa connect-mongodb per le sessioni, quindi spero che saranno in grado di condividere l’intero livello auth / session tra di loro.

In un’altra discussione, “Come condividere le sessioni in app Express” , scrive Stephen,

Ho un’applicazione web basata su express piuttosto complessa che è suddivisa in alcune subapp che sono anche app express (usando app.use ()) …

Quindi, come si usa app.use() per montare un’app secondaria? Stavo semplicemente cercando di usare var subApp = require('./subapp/app.js') , con listen() esecuzione solo nella var subApp = require('./subapp/app.js') quando ! module.parent ! module.parent (quindi non come ! module.parent ) … ma sembra che carichi tutti i percorsi della sub-app direttamente nell’app genitore. Ho provato a impostare basepath usando app.set('basepath', '/subapp/') , app.basepath = '/subapp/' , ecc, sia nella stessa app secondaria che dall’app padre, ma non sembra avere alcun effetto

Il assembly di app come questa rende incredibilmente flessibile, ma non è chiaro come farlo … ogni consiglio sarebbe estremamente gradito !! (E sono felice di condividere lezioni dalla mia implementazione EveryAuth se qualcuno sta lottando con quello.)

app.use(uri, instanceOfExpressServer)

Assicurati di non chiamare .listen su di esso.

L’alternativa è usare require("cluster") e invocare tutte le app in un singolo master in modo che condividano la stessa porta. Quindi fai in modo che il routing “funzioni solo”

Non sono sicuro se questo ti aiuta ma stavo cercando di prefisso i miei percorsi API. Quello che ho fatto è stato quando ho inizializzato il router, ho aggiunto il percorso di assembly. Quindi la mia configurazione sembra così

 //Default configuration app.configure(function(){ app.use(express.compress()); app.use(express.logger('dev')); app.set('json spaces',0); app.use(express.limit('2mb')); app.use(express.bodyParser()); app.use('/api', app.router); app.use(function(err, req, res, callback){ res.json(err.code, {}); }); }); 

Notare “/ api” quando si chiama il router