【问题标题】:express-ejs-layouts ignore some files (don't add layout to some files)express-ejs-layouts 忽略一些文件(不要给一些文件添加布局)
【发布时间】:2020-11-10 14:57:05
【问题描述】:

我只想对部分文件(而不是整个项目)使用ejs layouts。但是使用express-ejs-layouts 它对所有文件使用布局。这是代码的核心部分。

app.get("/page1",(req,res)=>{
  res.render("p1");
});

app.get("/page2",(req,res)=>{
  res.render("p2");
});

app.get("/page3",(req,res)=>{
  // Don't add Layout file in this page
  res.render("p3",{
    layout:null
  });
});

我在 stackoverflow 中发现,您可以通过传递具有 key layoutobject 及其 value 作为布局文件的名称 { layout : "layoutNumberOne" } 来使用多个布局。但是将其值设置为undefinednull 不起作用。我想要的解决方案不是创建一个空的布局文件并将object中的该文件的名称传递给render()可以工作的函数,因为如果是这种情况,我将不得不指定{ layout : "emptyLayout" }在我有很多的所有页面中。我正在寻找一个可以将layout 添加到特定route 的答案,这样路由中的所有请求都会有这个布局文件并且不会影响其他路径。我该怎么做?

【问题讨论】:

    标签: javascript node.js express ejs


    【解决方案1】:

    你可以这样写一个辅助函数:

    function demo(route, view, data={}){
        app.get(route, (req, res) => {
            let options;
            if(route === "/page3"){
                options = {
                    layout: "blank-layout"
                };
            };
            const locals = {
                ...data,
                ...options
            };
            res.render(view, locals)
        });
    }
    

    并在您想要呈现页面时调用它:

    demo("/page3", "p3", {anything: "whatever you want"})
    

    这个函数接受一个路由、视图文件和一个可选的数据对象,以防您想要传递一些动态数据以在模板中使用。

    它会设置你想要的路由,然后初始化一个名为“options”的变量,以便稍后在 if 语句给它一个值后传递给下面的“locals”对象。

    然后该函数将您的“路由”参数的值与您想要分配一些唯一选项的路由(在本例中为“/page3”)进行比较,如果结果为真,它将设置“选项”变量成为具有称为布局的属性和“空白布局”值的对象。该值与您要使用的布局文件的名称有关,因此请随意更改该值以满足您的需要。

    最后,这个“选项”对象与您之前可能传入的“数据”对象合并(如果您没有传入一个,它将只使用一个空对象);合并两个对象的结果存储在“locals”变量中,现在包含您的数据对象和选项对象具有的每个属性。然后将该变量与视图文件一起传递给渲染函数。

    请注意,您可以使用多个 if 语句来设置其他路由的选项

    【讨论】:

    • 问题是,page3 不是我要排除的唯一页面,有很多页面,无法对其进行硬编码,我正在寻找类似的内容:如果您不指定layout ,不要使用一个,如果指定,则使用该布局。无论如何感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2019-10-04
    • 2016-10-08
    • 2011-04-10
    • 2017-06-20
    • 2011-03-21
    • 2015-04-26
    相关资源
    最近更新 更多