layout.ejs不适用于Heroku中的NodeJS应用程序

时间:2012-08-01 00:49:22

标签: node.js heroku express ejs

我有通常的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"
  }
}

为什么布局上没有喜悦?感谢

3 个答案:

答案 0 :(得分:4)

我正在使用快递3.x与ejs-locals,它运作良好。您只需指定要使用的布局:

login.ejs

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

layout.ejs

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

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

答案 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布局的示例。