Express -Handlebars нескольких макетов - PullRequest
0 голосов
/ 28 апреля 2020

В настоящее время я пытаюсь использовать руль, где я могу легко ссылаться на несколько тем / макетов. Например, при рендеринге новой страницы я могу выбрать, какой макет. Каждый макет ссылается на свой набор файлов JS / CSS. Например: я мог бы сделать:

router.get('/bootstrap', function (req, res){ 
   res.render('general', {layout: bootstrap, data: variables});   
});
                     ---or --
router.get('/semantic', function(req,res){
   res.render('general', {layout: semantic, data: variables});

Я думал, что это можно легко сделать, просто создавая (bootstrap / semanti c .hbs) шаблоны, подобные этому, в моих / views / layouts каталог и ввод

res.render('general', {layout: 'bootstrap', data: variables});

Однако, похоже, это не работает

// bootstrap_layout.hbs

<html>
<head>
<link ref....to bootstrap css>
<body>
   {{{body}}}

<script src...to jquery>
<script src...to bootstrap js>
{{> Footer }}
</body>
<html>

Мое приложение. js Файл выглядит следующим образом:

var express = require('express');
var exphbs  = require('express-handlebars');

var app = express();
var hbs = exphbs.create({
   layoutsDir: /views/layouts });

// Register `hbs.engine` with the Express app.
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');

Проблема в том, что когда я пытаюсь это сделать, я не могу загрузить макет / шаблон при вызове его в {layout: bootstrap} или {layout: semantic}. Я сталкиваюсь с ошибками, где макет не может быть найден, против других ошибок ENOENT. Я также попытался изменить это:

Remove: var hbs = exphbs.create({
   layoutsDir: /views/layouts });
--------------------------------
Remove: hbs. engine, and replace with exphbs: 

app.engine('handlebars', exphbs({layoutDir: __dirname+'/views/layouts'}));
app.set('view engine', 'handlebars');

Мне не повезло выяснить, почему я сталкиваюсь с такими трудностями при вызове нового макета. У кого-нибудь есть какие-либо советы о том, где я могу пойти не так или я что-то упустил?

Спасибо!

1 Ответ

0 голосов
/ 28 апреля 2020

Использование одинарных кавычек в имени макета, который вы выбираете при вызове метода рендеринга:

res.render('general', {layout: 'bootstrap', data: variables});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...