layout.ejs在Heroku的NodeJS应用程序上不起作用

我有通常的nodejs快车应用程序…

var express = require('express'); var app = express.createServer( express.bodyParser() ); app.configure( function () { app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.use("/public", express.static(__dirname + '/public')); }); app.get('/', function (req, res) { res.render('index'); }); 

我有一个index.ejs和layout.ejs在/视图文件夹中:

layout.ejs:

 <!doctype html> <html lang="en" manifest=""><head> <title>jQuery Plugin Demo</title> </head> <body> <div class="container container-fluid"> <%- body %> </div> </body> </html> 

index.ejs:

 Hello world 

index.ejs只呈现“Hello world”文本而没有周围的layout.ejs包装器。 ejs正在工作。 它能够find正确的.ejs模板,但它只是忽略了布局。 我也试着明确地添加布局文件到应用程序..

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

所有这些工作在当地很好,但不是在Heroku上。 这是我的package.json:

 { "name": "in1-test", "version": "0.0.1", "author": "Iatek", "dependencies": { "express": ">=2.5.x", "ejs": ">=0.7.x" }, "engines": { "node": "0.6.x" } } 

为什么没有喜欢的布局? 谢谢

当你部署到Heroku时,它会为你所有的依赖进行npm安装。 因为你已经声明express> = 2.5.x,它会安装最新的3.0.0_betax。 Express 3不支持ejs(尚)的布局。

要修复删除“> =”并指定在本地版本中的express版本。

我用ejs-locals使用Express 3.x,效果很好。 您只需指定要使用的布局:

login.ejs

 <% layout('layout') -%> <form>...</form> 

layout.ejs

 <body> <h1>Hello</h1> <%- body %> </body> 

https://npmjs.org/package/ejs-locals

正如Chovy所说,如果你想升级到Express 3.x,ejs-locals可以帮你处理这个问题。 我在这里有一个github仓库,它为Express 3.x,ejs和twitter bootstrap提供了一个bootstrapped项目:

https://github.com/cacois/node-express-twitter-bootstrap

它是一个新的应用程序的好起点,或作为如何使用Express 3.x的ejs布局的一个例子。