我有两个Express.js应用main
和sub
,它们使用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:奇怪的行为在exphbs,express-hbs和express-handlebars中仍然存在。是我经历的特殊表现吗?
编辑3 :我可以利用something like this来解决我遇到的问题,但我仍然想知道为什么已安装的应用获胜#&# 39;如果有人有任何想法,那么渲染他们自己的布局和部分。它对我来说更方便!