3

我有通常的 nodejs express 应用程序...

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:

布局.ejs:

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

索引.ejs:

Hello world

index.ejs 仅呈现“Hello world”文本,而没有周围的 layout.ejs 包装器。ejs 正在工作。它能够找到正确的 .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"
  }
}

为什么布局上没有乐趣???谢谢

4

3 回答 3

4

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

登录.ejs

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

布局.ejs

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

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

于 2012-09-23T06:53:48.793 回答
3

当您部署到 Heroku 时,它会为您的所有依赖项执行 npm 安装;因为您已声明 express >=2.5.x,它将安装最新的 3.0.0_betax。Express 3 不支持 ejs 中的布局(目前)。

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

于 2012-08-01T01:06:31.110 回答
-1

正如 chovy 所说,如果您想升级到 Express 3.x,ejs-locals 可以帮助您处理这个问题。我在这里有一个 github 存储库,它为 Express 3.x、ejs 和 twitter 引导程序提供了一个引导项目:

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

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

于 2012-10-15T18:57:29.740 回答