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

Мой движок 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>

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

Ответ 1

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

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

<% include head.html %>

Ответ 3

arrr;)

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

app.engine('. html', require ('ejs').__ express);

Он должен читать:

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

Ответ 4

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

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

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

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