2016-09-30 3 views
1

Ich habe eine Knoten-App, die Express enthält. Bis zu diesem Zeitpunkt habe ich Swig als meine View-Engine verwendet. Ich konfigurierte diese Ansichtsmotor wie folgt:Verwenden von Nunjucks in einer Express-App

app.engine('html', swig.renderFile); 
app.set('views', path.join(__dirname, '../views')); 
app.set('view engine', 'html');  

Dieser Ansatz hat für mich gearbeitet. Aber da Swig veraltet ist, versuche ich nach Nunjucks zu ziehen. In einem Versuch, dies zu tun, habe ich Folgendes getan:

nunjucks.configure('views', { 
    autoescape: true, 
    cache: false, 
    express: app   
}); 

app.engine('html', nunjucks.render); 
app.set('views', path.join(__dirname, '../views')); 
app.set('view engine', 'html');  

Dies funktioniert nicht. Ich bekomme einen Laufzeitfehler, aber ich kann nicht sagen, welcher Fehler tatsächlich ausgelöst wird. In einem Versuch, die grundlegendsten Ansicht zu laden, ich versuche, die folgende HTML-Seite zu laden:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
</head> 
<body> 
    <h1>Hello</h1> 
</body> 
</html> 

Dies ist absichtlich eine wirklich einfache HTML-Ansicht, die keine Templat nicht verwendet. Ich möchte nur in der Lage sein, eine HTML-Ansicht mit Nunjucks zu laden, die als Ansichts-Engine eingestellt sind. Auch damit bekomme ich immer noch einen Fehler.

Ich kann sehen, render function, hat einen Rückruf. Es sieht so aus, als hätte der Callback ein Fehlerobjekt, das ich mir ansehen könnte. Aber ich weiß nicht, wie ich diesen Callback innerhalb der Zeile app.engine('html', nunjucks.render); tatsächlich verwenden soll.

Keine Erkenntnisse sehr geschätzt

Antwort

4

diese Zeilen entfernen würden:

app.engine('html', nunjucks.render); 
app.set('views', path.join(__dirname, '../views')); 
app.set('view engine', 'html');  

Aktualisiert Code:

var nunjucks = require('nunjucks'); 
var app = express(); 

// looks for html in views folder relative to current working directory 
nunjucks.configure('views', { 
    autoescape: true, 
    cache: false, 
    express: app 
}); 

app.get('/', function(req, res) { 
    res.render('index.html'); 
}); 
+1

Wenn ich das tue, bekomme ich einen Fehler, der sagt: '[Fehler: Vorlage nicht gefunden: index.html]'. Wo erwartet Nunjacks index.html? Ich würde annehmen, dass es nach ./views/index.html sucht. Aber anscheinend ist es nicht. – user687554

+2

Verstanden. Ich habe 'views' durch 'path.join (__ dirname, '../ views')' ersetzt. Jetzt funktioniert es. Vielen Dank – user687554

0

brauchte ich die folgende Konfiguration für Express 4.15.3 mit Nunjucks 3.0.1 .

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
nunjucks.configure('views', { 
    autoescape: true, 
    cache: false, 
    express: app 
}); 
app.set('view engine', 'html'); 
Verwandte Themen