【问题标题】:Should i put my condition in the template or render a different template我应该把我的条件放在模板中还是渲染一个不同的模板
【发布时间】:2021-09-16 09:22:02
【问题描述】:

我正在学习 node js 并使用 pug-template 引擎创建一个简单的酒店预订登录/管理页面。

当用户登录时,索引页面应该与未登录用户不同。

我应该在我的模板中做一个条件还是在我的主路由中做一个条件来呈现 index_logged 或 index_not_logged?

目前正在做

app.get('/', (req, res) => {
  User.find({}, function(err, users) {
    if(err) {
      console.log(err);
    } else {
      res.render("index", {
        title: "Willkommen",
        users: users
      });
    }
  });
});

在我的 index.pug 中

extends layout


block content
  if user
    h1 #{title}
    ul.list-group
      each user, i in users
        li.list-group-item
          a(href="/users/"+user._id)= user.name
  else
    .jumbotron
      h1 #{title}
      a(href="/users/login").btn.btn-primary Anmelden

我目前正在使用全局用户变量。

【问题讨论】:

  • 那么它在一个模板中有两个页面而不是两个页面,每个页面都在一个单独的模板中?您应该每页使用一个文件并在路由控制器中路由它们。
  • 当前从我的 app.use('/' 渲染 index.pug 并在 index.pug 中执行类似 if user, render this, else render this。不确定是否有正确的方法不过,请这样做。编辑问题以使其更容易。

标签: javascript node.js pug


【解决方案1】:

如果您的公共/ 与登录的/ 非常不同,则渲染两个单独的哈巴狗视图,例如:

app.get('/', (req, res) => {
  User.find({}, function(err, users) {
    if (err) {
      console.log(err);
      res.render("public_index");
    } else {
      res.render("index", {
        title: "Willkommen",
        users: users
      });
    }
  });
});

但是如果两个页面非常相似,有一些不同的部分,那么渲染相同的视图,但使用if user(理论上你可以在视图文件中的任意位置)来显示相关的相应的内容,就像您在问题中的 index.pug 中的内容一样。你的应用逻辑应该是:

app.get('/', (req, res) => {
  User.find({}, function(err, users) {
    let Users = undefined;
    if (err) {
      console.log(err);
    } else {
      Users = users
    }
    res.render("index", { title: "Wilkommen", users: Users });
  });
});

【讨论】:

  • 谢谢,我会调查的
猜你喜欢
  • 1970-01-01
  • 2014-06-17
  • 2011-06-10
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多