2013-02-23 71 views
3

我試用EJS作爲Express的視圖引擎。看來我的layout.ejs沒有被使用。我在'views'文件夾中有兩個視圖index.ejs和layout.ejs。看來,index.js呈現,但layout.ejs不是。 layout.ejs文件應該包含一個CSS文件,但是當頁面在瀏覽器中呈現時,這不在那裏。我放置在layout.ejs文件中的任何測試測試文本都不會與響應一起輸出。Express&EJS - layout.ejs未使用

我是否缺少額外的配置步驟?

謝謝!

我server.js代碼:

var express = require('express'); 

var app = express(); 
    app.set('view engine', 'ejs'); 
    app.use(express.static(__dirname + '/public')); 
    app.get('/', function(req, res){ 
      res.render('index.ejs', {title: 'EJS Engine'}); 
    }); 

    app.listen(8080); 

在我layout.ejs我鏈接到它駐留在公用文件夾一個CSS文件。

layout.ejs:

<!DOCTYPE html> 
     <html> 
     <head> 
      <title><%= title %></title> 
      <link rel="stylesheet" type="text/css" href="main.css"> 
     </head> 
     <body> 
       <%- body %> 
     </body> 
     </html> 

index.ejs

<div id="container"> 
     index.html 
</div> 
+0

顯式設置視圖目錄中的位置...默認爲CWD /視圖 – almypal 2013-02-23 04:10:36

+0

,我不得不使用快遞,泛音得到支撐。 – chovy 2013-02-23 04:15:23

+0

是不是layout.ejs默認使用EJS視圖引擎? – Nick 2013-02-23 04:16:18

回答

1

我有一個類似的問題。在我的情況下,我寧願使用Jade,但我需要爲特定項目提供更多「html」樣式的模板引擎。起初,我在Jade模板中考慮了express-partials或ejs-locals(如Jonathan Lonowski的評論中所述),甚至通過管道或點語法使用html(請參閱here以獲取關於該選項的更多信息,this SO post)。我無法將明確部分和ejs-local的附加依賴項引入此項目中。這兩個項目看起來不錯,可能會滿足您的需求。

如果你不想使用這些項目,你可以這樣做以下:

的意見/佈局head.ejs

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>The title</title> 
</head> 
<body> 

的意見/佈局foot.ejs

</body> 
</html> 

視圖/ index.ejs(或任何其他頁面)

<% include layout-head %> 
This is the index page - <%= title %> 
<% include layout-foot %> 

路線/ index.js

exports.index = function(req, res){ 
    res.render('index', { title: 'Express' }); 
} 

這不是一個最佳的解決方案,但它的工作原理。我的大多數應用程序都是單頁面應用程序,而且我還有其他一些限制,我必須在其中工作,以便符合我的需求。在許多情況下,這可能不是最好的解決方案 - 尤其是如果您有複雜和/或不斷變化的佈局。

2

這裏有您需要的模塊: https://www.npmjs.org/package/express-ejs-layouts

執行以下操作:

npm install express-ejs-layouts // install the layout module from the command line 

var express = require("express") 
    ,path = require('path') 
    ,fs = require('fs') 
    ,expressLayouts=require("express-ejs-layouts") // add this requirement 
    , app = express(); 

app.use(express.bodyParser()); 
app.use(expressLayouts); // add this use() 
app.use(express.static(__dirname)); 

現在EJS引擎應使用您的佈局。

+0

這個答案幫助我,因爲我使用Express 4和多個視圖文件夾。 – Carlos 2015-09-30 10:27:05

0
app.set('view options', { layout:'layout.ejs' }); 

將layout.ejs放入您的views文件夾中。 或者你可以放置佈局。EJS到的意見/佈局文件夾,然後用

app.set('view options', { layout:'layouts/layout.ejs' }); 
相關問題