2016-07-28 20 views
0

Ich möchte Daten an ein Include in EJS-Layout übergeben. Ich verwende Express und Express-partialsDaten in einem EJS erhalten Include mit Express-Partials

In den controller.js ich dieses:

exports.index = function(req, res, next) { 
    res.render('index', {uptime:'3'}); 
}; 

das ist layout.ejs:

<!DOCTYPE html>                 
<html>                    
    <head>                   
    <%- include head %>               
    </head>                   
    <header>                   
    <%- include nav %>                
    </header>                  
    <body>                   
    <section>                  
    <%- body %>                 
    </section>                  
    </body>                   
    <footer>                   
    </footer>                  
</html> 

das ist nav.ejs:

<li><%= uptime %></li> 

und ich bekomme diese Fehlermeldung:

ReferenceError: /root/apps/webpanel/webpanel/views/nav.ejs:23 
    21|  </li> 
    22|  </ul> 
>> 23|  <li><%= uptime %></li> 
    24| 
    25| 
    26| 

uptime is not defined 

wenn ich lege die Verfügbarkeit in index.ejs der Fehler verschwindet, aber ich mag verschiedene Ansichten für nav und Körper bekommen ...

Was ist die beste Lösung, um korrekt zu arbeiten? oder was mache ich falsch?:/ Danke !!

Antwort

0

Vielleicht in diesem Code: res.render('index', { uptime : '3'});

die sie machen die index.ejs

aber die uptime Schlüssel in layout.ejs

Sie res.render('layout', { uptime: '3'}); sagte tut gut

Sie sollten die erste param verstehen von .render() Bedeutung und stellen Sie sicher, welche Vorlage Sie rendern müssen.

+0

ich zwei Vorlagen machen möchten, Index und nav. In '<%- body %>' ist die Indexvorlage geladen (oder was auch immer Sie senden). Ich möchte die Daten an alle Layouts senden, aber ich weiß nicht, ob es möglich ist, – goty

+0

zwei Vorlagen, ich weiß nicht, was Sie meinen. – TomIsion

+0

Sie können 'include' verwenden, um zwei Vorlagen zu erstellen. Jedes 'render()' hat nur eine Vorlage. – TomIsion

0

Ich schlage vor, Sie in der Sitzung zu setzen, für den Zugriff auf irgendeine Route, somelike:

exports.index = function(req, res, next) { 
    req.session.uptime = 3; 
    res.render('index'); 
}; 

Und:

<li><%= session.uptime %></li> 
+0

Jetzt verwende ich diesen Code 'res.locals.uptime = 3;' In der HTML funktioniert und ich kann den Wert sehen, aber die Konsole zeigt wieder den Fehler 'uptime ist nicht definiert' – goty