2016-12-19 4 views
-1

Ich fühle mich wie die Frage ist einfach, und ich bin überrascht, dass ich nicht in der Lage gewesen, eine Antwort zu finden, da ich sicher bin, dass es schon einmal gefragt wurde.Globale Header-Datei Node.js & Express.js

Ich benutze node.js und express.js, und alles, was ich tun möchte, ist eine einzige statische header.html-Datei, die auf jeder Seite enthalten ist. Diese Datei würde alle Meta-Tags und CSS-Datei enthält, und usw. usw. usw.

Also, wenn mein Server eine Anfrage für website.com/blog/blog-post-3 bekommt, wird es 1. Laden Sie meine header.html Datei 2. laden Sie den Inhalt von der tatsächlichen content.html Datei

Es ist das gleiche Konzept wie der <?php include file.html ?> ....

Vielen Dank im Voraus, und sorry, wenn dies zuvor gestellt worden ist !! XD

+2

Verwenden Sie einen Pre-Prozessor? (Mops, etc.) – Scimonster

+0

Nein! Ich verwende keinen Pre-Prozessor! – TJBlackman

Antwort

-1

Verwenden

var app = express; 
app.all(...) 
{ 
... 
    next(); // this will make it execute next 
}.app.get(...){ 
... 
} 
+0

Und wie würden Sie den Header mit dieser Methode laden? – Scimonster

+0

Dies beantwortet nicht die Frage –

+0

@Scimonster in app.all. – MotKohn

0

Man könnte so etwas tun: -

Am Knoten-Server: -

var http = require('http'); 
var read = require('fs').readFileSync; 

http.createServer((req,res)=>{ 
    res.setHeader('Content-Type','text/html'); 
    res.end(new String(read('./headers.html')).replace('<my-content></my-content>',read('./content.html'))); 
}).listen(4000) 

Headers.html: -

<html> 
<!--custom css links here--> 

<my-content></my-content> 
<!-- custom scripts --> 
</html> 

Inhalt .html: -

<body>Temp</body> 
+0

Das scheint wie ein Ansatz, der funktionieren könnte, aber vielleicht nicht die beabsichtigte Verwendung von 'res.setHEader()'. Ich werde es überprüfen, aber ich bin mir nicht sicher, ob ich diesen Ansatz wählen werde. – TJBlackman

+0

verwenden Sie einige Frameworks, die Template-Funktionalität dann bieten, wie eckig –

1

Die Art, wie ich es in meiner eigenen App gemacht habe, ist eine View-Engine, die Includes unterstützt. Ich benutze Jade, das jetzt Pug heißt.

https://pugjs.org

Mit diesem Ansatz würden Sie Ihren Express App verdrahten auf Ihre Ansichten über Routen zu dienen. Das bedeutet im Wesentlichen, dass Sie das Verzeichnis festlegen, in dem Ihre Ansichten gespeichert werden, indem Sie die Ansichts-Engine festlegen (Jade in meinem Beispiel) und eine URL-Route definieren, deren Antwort eine Ansicht rendert. Dann könnten Sie aus Ihrer Sicht definieren, welche Include (s) Sie benötigen.

Einige Beispiel-Code (sollte nicht vollständig sein kann, aber die allgemeine Idee geben):

app.js

app.set('views', __dirname + '/views'); 
app.set('view engine', 'jade'); 
app.get('/', function (req, res) { 
    res.render('index'); 
}); 

views/index.jade - Hauptansicht

doctype html 
html 
    head 
    include includes/head.jade 
    body 
    ... 

Ansichten /includes/head.jade - einschließlich

link(href='index.css', rel='stylesheet', type='text/css') 
... 
+0

Ich muss heute darüber lesen und lassen Sie es wissen. Scheint wie ein anständiger Weg zu gehen. Bummed muss ich allerdings eine andere Lib benutzen ... – TJBlackman

Verwandte Themen