2013-05-28 5 views
5

Ich möchte EJS für Teil- und verwenden Jade für einzelne Seiten, wie Sie beide in einem NodeJs & Express Projekt verwenden?wie man ejs und jade in einem nodejs & express projekt verwendet?

+2

ich diese Antwort vielleicht denken Sie helfen: http://stackoverflow.com/a/15064438/1266006 –

+0

Aus Neugier, warum möchten Sie es tun? – esp

+1

Für Partials verwenden Sie einfach die Handlerbars, um Variablen schnell und ausreichend zu ersetzen. Für komplexe Seiten wird eine leistungsfähige Template-Engine benötigt. das hängt davon ab.Ich habe es herausgefunden und werde es teilen –

Antwort

8

Es ist einfach die Art und Weise in expressjs api docs und consolidate.js bei Github das Express.js doc Fragment

Referenz unten zu finden, benutzen Sie bitte


app.engine (ext, Rückruf)

Registrieren Sie die angegebene Vorlage Engine Callback als Ext. Standardmäßig wird() die Engine basierend auf der Dateierweiterung benötigt. Wenn Sie beispielsweise versuchen, eine Datei "foo.jade" zu rendern, ruft Express intern Folgendes auf und speichert require() bei nachfolgenden Aufrufen, um die Leistung zu erhöhen.

app.engine('jade', require('jade').__express); 

Für Motoren, die .__ ausdrücken aus der Box nicht liefern - oder wenn Sie eine andere Erweiterung der Template-Engine auf „Karte“ können Sie diese Methode verwenden. Zum Beispiel der Abbildung der EJS Template-Engine auf ".html" -Dateien:

app.engine('html', require('ejs').renderFile); 

In diesem Fall EJS eine .renderFile() Methode mit der gleichen Signatur bereitstellt, die Express erwartet: (Pfad, Optionen, Rückruf), obwohl Note dass es diese Methode als ejs __ intern ausgibt, also wenn Sie ".ejs" -Erweiterungen verwenden, müssen Sie nichts tun.

Einige Template-Engines folgen dieser Konvention nicht, die Bibliothek consolidate.js wurde erstellt, um alle gängigen Template-Engines des Knotens nach dieser Konvention abzubilden, so dass sie nahtlos in Express arbeiten können.

var engines = require('consolidate'); 
app.engine('haml', engines.haml); 
app.engine('html', engines.hogan); 
+2

Aber brauche ich nicht 'express.set ('view engine', 'ext');' irgendwo? – theonlygusti

+0

@theonlygusti Können Sie das näher ausführen? Ich versuche, dies zum Laufen zu bringen und nicht sicher, ob eine standardmäßige 'view engine' benötigt wird, wenn' consolidate' verwendet wird? Ich bin in der Dokumentation, so würde ein Zeiger auf den Verweis geschätzt werden, wenn Sie einen haben. Vielen Dank. –

2

Dies funktioniert für meine:

  1. Mops und ejs hinzufügen als

index.js macht

const express = require('express'); 
const path = require('path'); 
const app = express(); 
// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'pug'); 
app.set('view engine', 'ejs'); 
  1. Aufruf Rendern mit einem Dateinamen.filetext.

Routen/users

const express = require('express'); 
const router = express.Router(); 
router.get('/', function (req, res, next) { 
    res.render('users.ejs'); 
}); 
module.exports = router; 

Routen/über

const express = require('express'); 
const router = express.Router(); 
router.get('/', function (req, res, next) { 
    res.render('about.pug'); 
}); 
module.exports = router; 
+0

Vielen Dank für den neuen Namen 'Mops'. Ich bin neu in diesem Zeug. Haben Sie Tests mit 'consolidate.js' durchgeführt? Ich denke, das ist der Weg, den ich nehmen muss, da ich versuche, eine einzige Variable für das Front-End mit 'ejs' bereitzustellen. –

+0

ich habe mit mocha + assert getestet – joseAndresGomezTovar

+0

Ich schaute auf 'consolidate.js' aber am besten konnte ich sagen, es lässt mich nicht mischen Ansätze auf einer einzigen Seite zu mischen. Da ich bereits 'PUG' verwendet habe, bin ich auf die AJAX-Route gegangen, um meine Daten zu bekommen. Overkill.... –

Verwandte Themen