3

私は通常の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');
});

/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は、周囲のlayout.ejsラッパーなしで「Helloworld」テキストのみをレンダリングします。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 を使用していますが、うまく機能します。使用するレイアウトを指定するだけです:

login.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 install が実行されます。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 がこれを処理するのに役立ちます。Express 3.x、ejs、および twitter ブートストラップ用のブートストラップ プロジェクトを提供する github リポジトリがここにあります。

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

これは、新しいアプリの出発点として、または Express 3.x で ejs レイアウトを使用する方法の例として適しています。

于 2012-10-15T18:57:29.740 に答える