2013-02-23 69 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' }); 
相关问题