2013-04-28 14 views
10

Mój silnik EJS skonfigurować jest app.js jest jak poniżej:EJS to funkcja nie może znaleźć szablon z rozszerzeniem html

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

Mój katalog jest tak:

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

home.html jest tak:

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

<body> 

</body> 
</html> 

i head.html jest tak:

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

Problem polega na tym, że plik head.html nie zostanie przeanalizowany, jeśli rozszerzenie było html. Błąd mówi, że oczekuje pliku ejs. Czy istnieje problem z funkcją włączania?

Odpowiedz

11

Jak Elie Gnrd sugeruje, należy użyć .ejs pliki bezpośrednio poprzez zmianę konfiguracji Express, view engine.

Jeśli to nie jest opcją, a chcesz/trzeba zachować przy użyciu .html jako rozszerzenie dla szablonów, trzeba być jawne w include:

<% include head.html %> 
0

ja też miałem ten problem i zmodyfikowany plik z mojej aplikacji:

myapp/node_modules/ejs/lib/ejs.js 

funkcja:

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

Można zmienić domyślne rozszerzenie lub jak w moim przypadku zmieniłem funkcję bardziej bezpośredni:

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

Mogą zmodyfikować funkcję jak chcą.

Mam nadzieję, że to jest pomocne.

1

Arrr;)

  1. ty nie wspominając co app - więc zakładam Express> = 3
  2. rozwiązanie: zapomnieć kropka i __express w

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

Warto przeczytać:

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