2013-04-28 13 views
10

mio motore ejs istituito è app.js è come di seguito:ejs includono funzione non riesce a trovare il modello con estensione html

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

mio elenco è come questo:

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

Home.html è come questo:

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

<body> 

</body> 
</html> 

e head.html è come questo:

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

il problema è il file head.html non verrà analizzato se l'estensione era html. Errore dice che si aspetta il file ejs. Quindi c'è un problema con la funzione include?

risposta

11

Come Elie Gnrd sta suggerendo, si utilizza .ejs file direttamente modificando la configurazione view engine di Express.

Se questo non è un'opzione, e che vuoi/necessità di continuare a utilizzare .html come estensione per i modelli, devi essere esplicito nella includere:

<% include head.html %> 
1

È possibile utilizzare i file .js direttamente utilizzando app.set('view engine', 'ejs'); e rinominare index.html in index.ejs.

Ecco un esempio: http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/

+1

in realtà voglio usare il motore ejs ma l'estensione del file è html –

+0

app.engine; ('html', richiedono ('') ejs RenderFile.) – sebilasse

0

Anch'io ho avuto questo problema e modificato questo file della mia app:

myapp/node_modules/ejs/lib/ejs.js 

La funzione è:

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

È possibile modificare l'estensione predefinita o come nel mio caso ho cambiato la funzione di un più diretto:

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

possono modificare la funzione come vogliono.

Spero che sia utile.

1

arrr;)

  1. lei non ha citato ciò app - così presumo Express> = 3 soluzione
  2. : dimenticare il punto e __express in

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

Dovrebbe essere visualizzato:

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