Express.js挂载的应用程序 - Handlebars布局和部分继承?

时间:2016-05-17 14:50:19

标签: javascript express handlebars.js

我有两个Express.js应用mainsub,它们使用express-hbs作为其视图引擎。

我试图将sub放入其自己的独立模块中,并使用自己的布局,局部视图和视图。独立运行会产生我期望的行为:它呈现自己的布局,局部视图和视图。

就我而言,我打算将main转换为具有一些附加功能的实用程序。 main有自己的布局,部分和视图。 sub将安装在main上。

安装在main后启动main后,main会正确呈现自己的布局,部分和视图。但是,在sub的视图呈现得恰当的同时,sub似乎继承了main的布局和部分,而不是使用自己的布局和部分,这不是我的意思意图。

我想念的是什么?为什么sub似乎会继承main的布局和部分,而不是main的观看次数?

我已经拿走了我的用例并做了一个简单的例子。

index.js

var express = require('express');
var hbs = require('express-hbs');
var path = require('path');
var sub = require('sub');

var main = express();

var handlebars = hbs.express4({
  beautify:      true,
  defaultLayout: path.join(__dirname, './views/layouts/default'),
  partialsDir:   path.join(__dirname, './views/partials'),
  layoutsDir:    path.join(__dirname, './views/layouts')
});

// Set the application's view engine.
main.engine('hbs', handlebars);
main.set('view engine', 'hbs');
main.set('views', path.join(__dirname, './views'));

main.get('/', function(req, res) {
  res.render('index');
});

main.use('/sub', sub);

// Different (correct) directories, but only rendering main's layouts and partials.
console.log('main', main.get('views'));
console.log('sub', sub.get('views'));


main.listen(3000);

子/ index.js

var express = require('express');
var hbs = require('express-hbs');
var path = require('path');

var sub = express();

var handlebars = hbs.express4({
  beautify:      true,
  defaultLayout: path.join(__dirname, './views/default/layouts/default'),
  partialsDir:   path.join(__dirname, './views/default/partials'),
  layoutsDir:    path.join(__dirname, './views/default/layouts')
});

sub.engine('hbs', handlebars);
sub.set('view engine', 'hbs');
sub.set('views', path.join(__dirname, './views/default'));

sub.get('/', function(req, res) {
  res.render('index');
});

module.exports = sub;

更完整的示例是available here.

有没有办法在已安装的Express.js应用程序之间保持视图目录分开?

编辑1:奇怪的布局继承行为仍然存在,即使在定义要在sub的任何路由中使用的特定布局时也是如此。当它sub挂载main时,它们完全被{{1}}忽略。

编辑2:奇怪的行为在exphbsexpress-hbsexpress-handlebars中仍然存在。是我经历的特殊表现吗?

编辑3 :我可以利用something like this来解决我遇到的问题,但我仍然想知道为什么已安装的应用获胜#&# 39;如果有人有任何想法,那么渲染他们自己的布局和部分。它对我来说更方便!

0 个答案:

没有答案