2016-05-26 5 views
1

Ich habe Vorlageneinstellungen, die abhängig von der Sub-Domain variieren, die ich verwende. Daher versuche ich eine Möglichkeit zu finden, die express.static dynamisch auf Basis des von mir verwendeten Subdomain-Namens zu setzen.Express.js versucht express.static mit Variablen zu setzen

Wenn app.use ausgeführt wird, ist die Vorlage nicht definiert. Wenn ich app.use innerhalb von app.get ausführe, ist der Gültigkeitsbereich überschritten. Und wenn ich versuche, app.use von einer Funktion auszuführen, ist es auch außerhalb des Bereichs.

„Vorlage“ ist eine Variable, die ich in app.get bekommen, ist es meine Sub-Domain und HTTP-Anfrage

app.use('/subdomain/:domain/bower',express.static(path.join(__dirname, '/public/' + **template** + '/bower'))); 

app.get('/subdomain/:domain',function(req,res,next) {  

     get('/stores/template/' + req.params.domain) 
     .then(function(body){ 
      console.log("template: " + body.toString()); 
      template = body;     
      res.render('store',{store:req.params.domain}); 
     }); 

}); 

Ich bin mir ziemlich sicher, dass es mit Bereichen zu tun hat, aber bisher habe ich nicht war in der Lage, es zu lösen. Irgendwelche Hilfe würde geschätzt werden

Antwort

1

Ihr erster app.use() und der express.static() Aufruf in es läuft, wenn Ihr Server zum ersten Mal gestartet wird. Zu diesem Zeitpunkt hat die Variable template noch keinen Wert. Sie können die Dinge nicht wirklich so machen, wie Sie es versuchen.

läuft sofort auch, aber sein Callback wird nicht irgendwann in der Zukunft aufgerufen, wenn eine HTTP-Anfrage, die diese Route tatsächlich trifft, ankommt. Bis dann, wenn die template Variable zugewiesen wird, ist es viel zu spät, es in Ihrer früheren app.use() Aussage nützlich zu sein.

Dies wäre viel einfacher, wenn Ihr Server nur wissen könnte, welche Subdomain er bei der ursprünglichen Einrichtung aus einer Konfigurationsdatei oder ähnlichem bedient hat. Wenn Sie beabsichtigen, dass derselbe Server viele Subdomains gleichzeitig bedient und Sie möchten, dass er verschiedene Dateien basierend auf der Subdomain bereitstellt, müssen Sie komplett anders codieren, da Sie nicht einfach den einfachen Routenabgleich wie express.static() seit dem verwenden können Was Sie wirklich wollen, ist Sub-Domain + Route-Matching, das ist keine eingebaute Funktion, die mir bekannt ist.

Ich denke, wenn ich versuchte, dies zu lösen, würde ich meine erste Middleware untersuchen die Sub-Domain der Anfrage und fügen Sie es in die Front der URL eine einzigartige Pseudo-URL für jede Sub-Domain. Dann könnten Sie normales Routing für diese Pseudo-URL ausführen, was der Rest der Middleware und Routen als Anforderungs-URL sehen wird.