функция EJS include не может найти шаблон с расширением html

моя настройка двигателя ejs-это приложение.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

дома.html выглядит так:

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

<body>

</body>
</html>

и голову.html выглядит так:

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

проблема в голове файла.html не будет проанализирован, если расширение было html. Ошибка говорит, что он ожидает файл ejs. Итак, есть проблема с функцией include?

4 ответов


как предлагает Эли Gnrd, вы используете .ejs файлы непосредственно путем изменения view engine конфигурация Express.

если это не вариант, и вы хотите/должны использовать .html в качестве расширения для ваших шаблонов вы должны быть явными в include:

<% include head.html %>

вы можете использовать .ejs файлы непосредственно с помощью app.set('view engine', 'ejs'); и переименование индекса.html для индексирования.EJS по.

вот пример: http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/


arrr;)

  1. вы не упомянули, какое приложение - поэтому я предполагаю Express >=3
  2. решение: забудьте точку и _ _ express в

app.двигатель.'(HTML-код', требуют('EJS по').__express);

следует читать :

app.engine('html', require('ejs').renderFile);

у меня тоже была эта проблема и я изменил этот файл моего приложения:

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';
}

Они могут изменять функцию по своему желанию.

Я надеюсь, что это полезно.