我有通常的nodejs express app ...
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');
});
我在/ views文件夹中有一个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正在运作。它能够找到正确的.ejs模板,但它只是忽略了布局。我也尝试过明确地将布局文件添加到app ..
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"
}
}
为什么布局上没有喜悦?感谢
答案 0 :(得分:4)
我正在使用快递3.x与ejs-locals,它运作良好。您只需指定要使用的布局:
login.ejs
<% layout('layout') -%>
<form>...</form>
layout.ejs
<body>
<h1>Hello</h1>
<%- body %>
</body>
答案 1 :(得分:3)
当您部署到Heroku时,它会为所有依赖项执行npm安装;因为你已经声明了明确的&gt; = 2.5.x它会安装最新的3.0.0_betax。 Express 3不支持ejs中的布局。
要修复删除“&gt; =”并指定本地版本中的快递版本。
答案 2 :(得分:-1)
正如chovy所说,如果你想升级到Express 3.x,ejs-locals可以帮助你解决这个问题。我在这里有一个github repo,为Express 3.x,ejs和twitter bootstrap提供了一个bootstrapped项目:
https://github.com/cacois/node-express-twitter-bootstrap
它是新应用的良好起点,或者作为如何在Express 3.x中使用ejs布局的示例。