2013-04-28 83 views
10

我EJS引擎設置爲app.js是象下面這樣:EJS包括功能無法找到HTML擴展模板

// 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文件。那麼include函數有問題嗎?

回答

11

由於埃利Gnrd是在暗示,可以通過切換快速的view engine配置直接使用.ejs文件。

如果這不是一個選項,你想/需要使用.html作爲擴展你的模板保持,你必須在明確的包括:

<% include head.html %> 
1

您可以直接使用.ejs文件,使用app.set('view engine', 'ejs');並將index.html重命名爲index.ejs。

下面是一個例子: http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/

+1

其實我想用EJS引擎,但該文件的擴展名是HTML – 2013-04-28 12:32:10

+0

app.engine( 'HTML',要求( 'EJS')RenderFile模塊。) – sebilasse 2014-02-14 16:55:27

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

,因爲他們希望他們可以修改功能。

我希望這會有幫助。

1

arrr;)

  1. 你沒有提到什麼樣的應用程序 - 所以我想快遞> = 3
  2. 解決方案:忘記點和__express在

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

它應該閱讀:

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