一个expressjs应用程序的多个视图目录

时间:2013-01-21 07:18:55

标签: express

我基本上有一个带有以下目录的expressjs应用程序:

app/views

app/plugin/views

并希望能够从两个目录中提供服务。

这将如何运作?

我试过设置

app.set('views', second_dir)

然后我的应用程序找不到我的第一个视图目录。

然后我尝试了symlinking文件夹,

fs.exists(viewDir, function() {
    fs.symlink(viewDir, rootViewDir, 'dir', function(err) {
        console.log('adding symlink with err: '+err+ ' in viewdir ='+viewDir+' rootDir ='+rootViewDir);
    });
  });

这个工作,创建符号链接(永久), 但节点似乎无法读取符号链接的视图。

我的困境是否有解决方案?

非常感谢, 玩得开心 雅舍

3 个答案:

答案 0 :(得分:3)

为什么不改变你的观点的结构,以便“插件”#39;文件夹存在于您的视图下方。夹?然后,在渲染视图时,可以指定当时的子路径:

res.render('plugin/pluginview1', ...);

答案 1 :(得分:2)

通过tj holowaychuk发现了这段视频 他只是为插件创建了额外的快速应用程序。 http://vimeo.com/56166857

他还特别提到了视频评论中“全局”变量的继承, 这意味着app.locals和类似的东西在应用程序和插件链中的每个快递应用程序中应该是相同的,现在将进行测试:)

无论如何,只是想用我最初在没有测试的情况下被解雇的答案来回答我自己的问题(因为我并没有假设变量的这种全局联系存在;)

玩得开心

雅舍

答案 2 :(得分:1)

我正在运行Node.JS v0.8.20,Express.JS v4.2.0和EJS v0.8.8我有我的观点'在app.js中定义的路径为:

app.set('views', path.join(__dirname, 'views'));

我已将views文件夹结构定义为\views\{model}\{operations}。例如:\views\products\add.ejs

当我在路由文件中引用视图时,例如在\routes\products.js中,我引用子目录并转义反斜杠。例如,要引用views\products\add.ejs文件,我使用:

res.render('products\\add');

我喜欢这种格式,因为它允许我将模型操作保存在每个文件的视图中,然后将每个模型对象的操作分组到文件夹中。