使用子应用程序和共享模板/视图来表达MVC

时间:2015-02-25 11:39:01

标签: node.js express

节点MVC

好的,我现在正在为所有未来项目构建Node / Express MVC样板。这些要求规定必须支持子应用程序以帮助组织代码,并在站点的不同区域之间创建关注点分离,例如用户帐户部分和站点的未经过身份验证的区域。

我的进展如下:https://github.com/tkiddle/expressPlate/tree/tkiddle

到目前为止,我已经创建了一种支持子应用程序和组织每个子应用程序控制器的方法。

目前的结构看起来有点像这样:

ROOT
 | - server.js
 | - package.json
 | - views
    | - index.jade
 | - apps
    | - admin
        | - models
        | - controllers
        | - views
            | - assets
            | - templates (jade templates)
    | - blog 
        | - models
        | - controllers
        | - views
            | - assets
            | - templates (jade templates)
    | - events 
        | - models
        | - controllers
        | - views
            | - assets
            | - templates (jade templates)

我想支持孤立的视图/ jade模板(特定于特定子应用程序的视图)和共享视图/模板(可以跨多个子应用程序共享的视图)。我的想法是,当在子应用程序中呈现视图时,如果找不到模板,它会在ROOT-> views目录中查找它。

这也将允许我有一个常见的 index.jade 模板(在ROOT-> views目录中),并且对于每个子应用程序的模板/ jade文件,该功能可以扩展它。

我对此感到轻微失落。任何人都可以提供这样做的解决方案吗?

3 个答案:

答案 0 :(得分:0)

不确定我完全理解"轻微损失"您的问题,但理想情况下我建议在根文件夹中放置一个shared文件夹以及layouts文件夹。 shared可以包含页眉,页脚等共享视图,而layouts可以包含应用程序页面布局,详细布局等应用程序骨干页面。如果应用程序需要更清晰的子应用程序样式,您可以选择在子应用程序的views文件夹中复制此结构。

我希望这会有所帮助。

答案 1 :(得分:0)

未来的注意事项:sails.js是目前最受欢迎的node.js MVC框架,并且拥有庞大且不断发展的社区。它得到了很好的支持,并使用熟悉的express.js库进行路由。绝对值得研究你的情况。

答案 2 :(得分:-1)

我有同样的问题。对于具有自己的私有视图目录的子应用程序,您可以使用app.locals.basedir =' apps'设置jade中的默认相对路径,如果您正在使用express。所以在玉器中你可以调用include /blog/views/templates/blog.jade。如果您有一个共享目录,供所有子应用程序使用,您可以调用include /shared/views/mixins/global-header.jade,例如。

我的问题是我尝试进行迁移过渡,而不是一次性完成。因此,我没有将我的所有应用程序放在一个不错的应用程序或子应用程序目录中,只有少数几个。我仍然需要能够访问原始视图目录,其中包含每个功能,模块,应用程序,子应用程序,混合等等的视图...

使用快递,可以延长'将使用app.use(express.static(' / module1 / public')提供给客户端的公共目录,然后再次调用另一个目录app.use(express.static(&#) 39; / module2 / public')。我希望有一种方法以类似的方式扩展 views目录。有吗?是否可以汇编一组视图?使用这个文件例如,拥有app.basedir.use(' blog / views')并再次致电扩展,app.basedir.use(' events / views&#39)会很高兴。 ;),然后在Jade我只需要调用,包括blog-base.jade和event-base.jade,即使它们在技术上位于不同的视图目录中。