2016-10-23 5 views
0

Ich habe mehrere Antworten gelesen, aber es ist unklar, wie Express mit mehreren Ansichtsordnern arbeiten kann.Mehrere Ansichtsordner mit Node.js/Express

sagen Lassen Sie den Express App unabhängige Teile enthält, in Unterordner organisiert:

app 
    +partA 
    +views 
     index.html 
    +partB 
    +views 
     index.html 

Dann setzten wir jeden Ordner als Ansicht:

app.set('views', [__dirname + '/partA/views', __dirname + '/partB/views']); 

Aber wie index.html im zweiten Ordner zugreifen?

In routes.js:

res.sendFile('index.html'); 

wird immer einen Teil A. senden

Auch können wir nicht den relativen Pfad verwenden:

res.sendFile('/partB/views/index.html'); 

den Fehler auslösen:

Error : Failed to lookup view "/partB/views/index.html" in views directories "/partA/views" or "/partB/views"

Also, wie funktioniert das? Ich weiß, der übliche Ansatz besteht darin, die Teile als Unterordner des Ansichtsordners zu gestalten, aber das ist keine Option. Ich möchte nicht für jeden Teil doppelte Ordner haben, in /views, /public, /lib usw.

Antwort

0

Was möchten Sie tun, wenn der Anruf res.sendFile('index.html') - PARTA oder TeilB? Wie muss Express wählen?

Versuchen
1. res.sendFile('../../partB/views/index.html');
2. In Middleware app.set('views', '/partB') auf Teil B Anfrage
3. app.set('views', '/') und geben jedes Mal vollständigen Pfad res.sendFile('/partB/views/index.html');

+0

Ansichten für jede Anforderung wie ein Overkill scheint Einstellung ... wenn ich Sichten Sie Ansichten auf "/", bedeutet das nicht ein Sicherheitsproblem? wie in der Lage, auf Server-Dateien zugreifen – mens

+0

Gewöhnlichen Weg ist speichern Vorlagen in 'Ansichten' (oder' Templates') Ordner. App sendet keine Vorlagen direkt über 'sendFile', sondern benutzt' res.render (Vorlagenname) '. Remotebenutzer haben also keinen Zugriff auf Vorlagen. –