Если вы с помощью «экспресс модуль -handlebars', то должно работать:
// ...
app.set("views", __dirname);
exphbs.ExpressHandlebars.prototype.layoutsDir = 'path/to/directory/';
app.engine('handlebars', exphbs({defaultView: 'name-of-template'}));
// ...
Я пришел на это копаться в источнике модуля, то получается, что эта линия ...
// express-handlebars/lib/express-handlebars.js (line 55 in v1.2.2)
ExpressHandlebars.prototype.layoutsDir = 'views/layouts/';
... это то, что дает поведение по умолчанию всегда смотрит в «{{все, что вы указали}}/просмотров/макеты /»
Так по существу - если, может быть, у вас есть другой реж структуры в виду или есть некоторые другие причины, чтобы переопределить его, вы можете, используя строку в моем примере. Просто убедитесь, что вы делаете это до вы создаете экземпляр exphbs.
Если вы используете какой-либо другой модуль (я не уверен, что там есть), вполне вероятно, что у них есть аналогичные настройки, которые можно переопределить с помощью немного jiggery-pokery (просто запустите «find» on содержимое файла для «views/layouts /».
Отметьте, что я оставляю «app.set» («views», __dirname); «так же, как если бы я хранил шаблоны в любом месте своего каталога сервера и отображал их так :
res.render("moduleName/templateName");
После обновления v2.0.1 выше не будет работать, вместо этого вы можете передать каталог по умолчанию в качестве аргумента, как показано ниже:
var hbs = exphbs.create({
layoutsDir: 'app/server/',
...
я хочу поблагодарить вас Heihachi за расклеивание этот вопрос, я был поиск способа интеграции рулей w/Express, но не мог найти хороший пример, глядя на командную строку экспресс-генератора, заставив меня вспомнить, как можно использовать hbs, и дал мне простую, но хорошую демонстрацию, которую я не мог найти онлайн. Благодарю. – Bharat