2011-01-06 7 views
6

Ich implementiere eine Webapp mit node.js und express, mit der Jade Template Engine.express + jade: Die lokale Variable ist in der Ansicht undefiniert (node.js + express + jade)

Vorlagen sind in Ordnung und können auf Helfer und dynamische Helfer zugreifen, aber keine lokalen Variablen außer der lokalen Variable "body", die von express bereitgestellt wird und in meiner layout.jade verfügbar und definiert ist.

Dieser Teil des Codes ist:

app.set ('view engine', 'jade'); 

app.get ("/test", function (req, res) { 
    res.render ('test', { 
     locals: { name: "jake" } 
    }); 
}); 

und das ist test.jade:

p hello 
=name 

, wenn ich die zweite Zeile (Referenzierung Name) zu entfernen, macht die Vorlage richtig, die zeigt, Wort "Hallo" auf der Webseite. Als ich das = Name, wirft es einen Reference:

500 ReferenceError: Jade:2 NaN. 'p hello' NaN. '=name' name is not defined 
NaN. 'p hello' 
NaN. '=name' 

Ich glaube, ich bin die Jade folgenden Beispiele und genau ausdrücken zu lokalen Variablen mit Respekt. Mache ich etwas falsch oder könnte das ein Fehler in Express oder Jade sein?

+1

Arbeitet hier fein (Node 3.4, Jade 0,6, Express 0.7. 2), können Sie weitere Informationen zur Verfügung stellen? Z.B. Ihre Versionen sowie das Layout.jade. –

+0

Danke - das hat es behoben. Während einiger Installationsverwirrungen endete ich mit einem veralteten Expressverzeichnis unter ~/.node_libraries. Löschen und Ausführen von "npm install express", um die neuesten zu installieren, behob das Problem. – Jake

+0

Was StackOverflow, was mache ich? Löschen Sie die Frage? Es ist nicht sehr gut für andere, da es nur eine Version ist. Und ich kann deinen Kommentar nicht als richtige Antwort markieren. – Jake

Antwort

7
app.set ('view engine', 'jade'); 

app.get ("/test", function (req, res) { 
    res.render ('test', { 
     name: "jake" 
    }); 
}); 

können Sie es so machen.

3

Anstatt = können Sie # {Variablenname} verwenden. Hier ist ein Beispiel, wie ich es verwende: Dies wird eine Seite mit einem Menü für die Navigation rendern. Wenn Sie den Seitentitel bei jedem Laden der Seite übergeben, müssen Sie natürlich für jede Seite eine app.get-Funktion erstellen.

App.js

var navigation = { 
    home : { 
    uri : "/", 
    url : "index", 
    title : "Home" 
    }, 
    lab : { 
    uri : "/lab", 
    url : "lab", 
    title : "Lab" 
    }, 
    profile : { 
    uri : "/profile", 
    url : "profile", 
    title : "Profile" 
    }, 
    timetable : { 
    uri : "/timetable", 
    url : "timetable", 
    title : "Timetable" 
    } 
} 

app.get(navigation.profile.uri, function(req, res){ //Profile 
    res.render(navigation.profile.url, { 
    title: navigation.profile.title, 
    navigation: navigation 
    }); 
}); 

profile.jade

section#page-content 
    h1#page-title #{title} 
    p Welcome to #{title} 

layout.jade

!!! 5 
html 
    head 
    title= title 
    link(rel='stylesheet', href='/stylesheets/reset.css') 
    link(rel='stylesheet', href='/stylesheets/style.css') 
    body 
    header#site-header 
     nav#site-navigation 
     != partial("partials/navigation") 
    section!= body 
    footer#page-footer 
2

ich den Fehler denke irgendwann verursacht wird aufgrund der Anfrage des Browsers für favicon.ico.

versuchen, diese Zeilen an den layout.jade Kopf Hinzufügen das Symbol

link(rel='icon', href='/images/siteicon.png') 

Dies hat den gleichen Fehler entfernt zu verknüpfen, die ich war immer