2017-07-19 3 views
0

Meine Frage ist sehr ähnlich zu this stackoverflow Frage.Nodejs und Express statische Ansicht Routing

Ich habe meine Verzeichnisstruktur wie:

|-static 
|---css 
|---img 
|---js 
|-views 
|---login.ejs 
|---pure.html 
|---dash 
|-----dashboard.ejs 
|-----alsopure.html 

Meine Konfiguration:

app.set('views', __dirname + '/views'); 
app.use(express.static(__dirname + '/static')); 

Ich habe definiert auch die Routen wie:

app.get('/login', function(req,res){ 
    //some locals 
    res.render('login.ejs', locals); 
}); 

app.get('/dash', function(req,res){ 
    locals.date = new Date().toLocaleDateString(); 
    res.render('dash/dashboard.ejs', locals); 
}); 

Im Ansicht Ordner, halte ich sowohl meine reine statische html als auch meine dynamischen ejs Dateien.

Nun, wie kann ich die statische HTML aus dem Sichten-Verzeichnis dienen? Wenn ich den/views-Ordner hinzufügen würde, um als statische Datei zu dienen, könnte der Benutzer auch meine ejs-Dateien sehen, wenn sie die richtige URL treffen.

Da es mehrere HTML-Dateien gibt, möchte ich nicht für jede neue Seite eine neue Route hinzufügen.

Gibt es auch eine Möglichkeit für mich, meine Ansicht-Engine anzugeben, dass es sich um einen statischen HTML-Code handelt und diese Seite nicht "verarbeitet" werden muss?

Danke!

+0

Warum verschieben Sie Ihre 'HTML'-Dateien nicht in einen statischen Ordner und liefern Dateien von dort? – CuriousMind

+0

Oder Sie können einen Ordner "public" hinzufügen und es als statisch machen? –

+0

@CuriousMind, da ich alle Ansicht bezogenen Inhalt in einem Ordner für den einfachen Zugriff und die Organisation behalten wollte. –

Antwort

0

So können Sie verwenden nodejsfs und dann Routen wie:

app.get(/.*/, function(req, res, next) { 
    var path = __dirname + '/views/' + req.path + '.html'; 
    if(fs.existsSync(path)) { 
    // Consolidate function to load html with path 
    } 
    else { 
    next(); 
    } 
} 

Oder Sie es einfach als Middleware verwenden:

app.use(function(req, res, next) { 
    var path = __dirname + '/views/' + req.path + '.html'; 
    if(fs.existsSync(path)) { 
    // Consolidate function to load html with path 
    } 
    else { 
    next(); 
    } 
} 

, aber ich denke, es ist ein aufblasen werden wird für Ihre Programm :). weil es für jede Antwort nach der HTML-Datei sucht.

+0

Entlang einer ähnlichen Zeile (obwohl ich vorschlagen würde, eine ordnungsgemäße Middleware zu verwenden), können Sie überprüfen, ob der angeforderte Pfad eine Erweiterung ".ejs" hat, und verweigern, es zu bedienen. – robertklep

+0

Ja danke. Ich habe gerade den Kommentar @robertklep bearbeitet. –