2013-02-23 2 views
3

Im пытается EJS как двигатель взгляда с Express. Кажется, что мой layout.ejs не используется. У меня есть два вида index.ejs и layout.ejs как в моей папке «views». Кажется, что index.js отображается, но layout.ejs - нет. Файл layout.ejs должен содержать файл CSS, но когда страница отображается в браузере, этого там нет. Любой тестовый тестовый текст, который я помещаю в файл layout.ejs, не выводится с ответом.Экспресс и EJS - layout.ejs не используется

У меня отсутствует дополнительный шаг настройки?

Спасибо!

Мой код server.js:

var express = require('express'); 

var app = express(); 
    app.set('view engine', 'ejs'); 
    app.use(express.static(__dirname + '/public')); 
    app.get('/', function(req, res){ 
      res.render('index.ejs', {title: 'EJS Engine'}); 
    }); 

    app.listen(8080); 

В моих layout.ejs я ссылающийся на один файл CSS который находится в общей папке.

layout.ejs:

<!DOCTYPE html> 
     <html> 
     <head> 
      <title><%= title %></title> 
      <link rel="stylesheet" type="text/css" href="main.css"> 
     </head> 
     <body> 
       <%- body %> 
     </body> 
     </html> 

index.ejs

<div id="container"> 
     index.html 
</div> 
+0

Явное установить местоположение для каталога просмотров ... по умолчанию для ВПЦ/виды – almypal

+0

я должен был использовать экспресс-партиалы, чтобы получить поддержку. – chovy

+0

Является ли layout.ejs предположительно используемым механизмом просмотра EJS по умолчанию? – Nick

ответ

1

У меня аналогичная проблема. В моем случае я предпочел бы использовать Jade, но у меня есть требование для более «шаблона шаблона стиля HTML» для конкретного проекта. Сначала я рассматривал выражения-частичные или ejs-locals (как упоминается в комментарии Джонатана Лоновски) или даже используя html через синтаксис труб или точек в шаблонах Jade (см. here для получения дополнительной информации об этой опции и this SO post). Я не могу ввести дополнительные зависимости для выражений-частичных и ejs-locals в этот проект. Эти два проекта выглядят хорошо и могут удовлетворить ваши потребности.

Если вы не хотите использовать эти проекты, вы можете сделать что-то вроде следующего:

просмотров/компоновочных-head.ejs

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>The title</title> 
</head> 
<body> 

просмотров/макете-foot.ejs

</body> 
</html> 

просмотров/index.ejs (или любая другая страница)

<% include layout-head %> 
This is the index page - <%= title %> 
<% include layout-foot %> 

маршруты/index.js

exports.index = function(req, res){ 
    res.render('index', { title: 'Express' }); 
} 

Это не является оптимальным решением, но это работает. Большая часть моего приложения будет одностраничным приложением, и у меня есть некоторые другие ограничения, над которыми я должен работать, поэтому это работает для моих нужд. Это может быть не лучшим решением во многих случаях, особенно если у вас сложный и/или изменяющийся макет.

2

Вот модуль вам нужно: https://www.npmjs.org/package/express-ejs-layouts

Выполните следующие действия:

npm install express-ejs-layouts // install the layout module from the command line 

var express = require("express") 
    ,path = require('path') 
    ,fs = require('fs') 
    ,expressLayouts=require("express-ejs-layouts") // add this requirement 
    , app = express(); 

app.use(express.bodyParser()); 
app.use(expressLayouts); // add this use() 
app.use(express.static(__dirname)); 

Теперь EJS двигатель должен использовать макет.

+0

Этот ответ помог мне, потому что я использую Express 4 и несколько папок. – Carlos

0
app.set('view options', { layout:'layout.ejs' }); 

Место layout.ejs в вашей папке видов. Альтернативно вы можете разместить макет.EJS в папку просмотров/макеты, а затем использовать

app.set('view options', { layout:'layouts/layout.ejs' });