【问题标题】:Structuring a MEAN app so Express can find all the Jade files构建一个 MEAN 应用程序,以便 Express 可以找到所有 Jade 文件
【发布时间】:2014-08-05 12:27:54
【问题描述】:

我现在正在构建一个越来越大的 MEAN 应用程序。我真的需要开始模块化应用程序,但现在我的 Express 服务器配置为在一个文件夹中查找 Jade 视图

app.set('views', path.join(__dirname, '/app/views'));
app.set('view engine', 'jade');

这些帖子的作者展示了分散在不同模块目录中的应用程序的视图文件。

如果我现在尝试这样做,我的 Express 服务器将无法看到它们。我怎样才能让 Express 能够找到所有 Jade 视图?

【问题讨论】:

    标签: node.js angularjs express module pug


    【解决方案1】:

    两种解决方案:

    • 您可以使用名为views 的基本文件夹并在views 中创建子文件夹。 例如,views/menu/views/header/。要使用它,您必须 在 Express 中声明 basedir,以便 Jade 知道在哪里查看您的 意见,通过做app.locals.basedir = __dirname + "/views";。然后, 在您的 Jade 文件中,使用 include /header/a.jadeinclude /menu/item1.jade 等...
    • 使用 Express App 子挂载功能。这使您可以模块化 你的主应用程序变成了小应用程序,它们都有自己的路线、视图 等等...您可以观看此nice video tutorial by TJ Holowaychuk 以了解更多信息。

    这对你有帮助吗?

    【讨论】:

    • 我决定使用运行良好的 Express 子挂载功能。我仍然不完全理解它如何与这个 SO 答案stackoverflow.com/a/21103523/883807 中谈到的整个循环依赖关系一起工作,但我最终会弄清楚的。谢谢沃尔多:)
    【解决方案2】:

    我刚开始在我的渲染调用中使用模块前缀并将我的视图基目录设置为我的模块的父目录。所以如果我开始:

    app/views/page1.jade
    app/views/page2.jade
    

    并且正在做res.render("page1"),我重组为:

    app/module1/page1.jade
    app/module2/page2.jade
    

    然后我做app.set("views", "app") 然后用res.render("module1/page1") 渲染。

    【讨论】:

    • 我为我的应用创建了大约 20 个不同的模块文件夹,每个文件夹中包含控制器、视图和 module.js 文件。所以你是说对于这些文件夹中的每一个我都必须在其上执行res.render() 才能呈现视图?例如对于注册模块,res.render("signup/signup") 其中路径中的第一个signup 指的是模块文件夹,路径中的第二个signup 指的是signup.jade
    • 是的,没错。当然,如果你有很多页面并且这成为一个清晰的模式,你可以提取一个中间件,如果你愿意,它会根据 URL 路径自动呈现正确的模板。不过,我通常没有 URL 路径到模板路径的 1-1 映射。
    猜你喜欢
    • 1970-01-01
    • 2013-05-09
    • 2023-04-03
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    相关资源
    最近更新 更多