12

私のejsエンジンのセットアップはapp.jsで、以下のようなものです:

// this parse html file as ejs file
    app.engine('.html', require('ejs').__express);
    app.set('view engine', 'html');
    app.set('views', __dirname + '/view');

私のディレクトリは次のようなものです:

view (folder)
  home.html
  head.html
app.js

Home.html は次のようになります。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>home</title>
<% include head %>
</head>

<body>

</body>
</html>

head.html は次のようになります。

<link rel="stylesheet" type="text/css" href="css/main.css">
<script type="text/javascript" src="js/jquery-1.5.js"></script>

問題は、拡張子が html の場合、ファイル head.html が解析されないことです。エラーは、ejs ファイルが必要であると言っています。インクルード機能に問題があるのでしょうか?

4

5 に答える 5

12

Elie Gnrd が示唆しているように、Express.ejsの構成を変更することでファイルを直接使用します。view engine

それがオプションではなく、.htmlテンプレートの拡張として使用し続ける必要がある場合は、インクルードで明示する必要があります。

<% include head.html %>
于 2013-04-28T14:00:52.370 に答える
1

index.html を使用して名前を index.ejs に変更することにより、.ejs ファイルを直接使用できますapp.set('view engine', 'ejs');

以下に例を示します: http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/

于 2013-04-28T12:23:37.713 に答える
0

私もこの問題を抱えていて、アプリのこのファイルを変更しました:

myapp/node_modules/ejs/lib/ejs.js

機能は次のとおりです。

function resolveInclude(name, filename) {
  var path = join(dirname(filename), name);
  var ext = extname(name);
  if (!ext) path += '.ejs';
  return path;
}

デフォルトの拡張子を変更するか、私の場合のように関数をより直接的なものに変更できます。

function resolveInclude(name, filename) {
  return join(dirname(filename), name) + '.html';
}

必要に応じて関数を変更できます。

お役に立てば幸いです。

于 2013-06-16T18:53:51.640 に答える