首页 > 解决方案 > 登录用户和其他用户变量在 Pug 模板中混合

问题描述

我有一个基本的快递应用程序,其中有一个哈巴狗布局,然后是其他扩展布局的哈巴狗模板。

我的问题是:

在主页上,在主导航上,我可以看到登录用户的照片,这是CORRECT

但是当我去查看另一个用户的个人资料时,我会在主导航栏上看到照片,就好像他们在哪里登录一样,INCORRECT

在我的 layout.pug 我有这个:

doctype html
html
  head
    title= `${title} | ${h.siteName}`

  body
    block header
      header.top
        nav.nav
            if user
              li.nav__item: a.nav__link.ph4(href="/logout", class=(currentPath.startsWith('/logout') ? 'nav__link--active' : ''))
                span Logout
              li.nav__item: a.nav__link.ph4(href="/account", class=(currentPath.startsWith('/account') ? 'nav__link--active' : ''))
                img.avatar.pa2(src=`/uploads/${user.photo}`)
            else
              li.nav__item: a.nav__link(href="/register", class=(currentPath.startsWith('/register') ? 'nav__link--active' : '')) Register
              li.nav__item: a.nav__link(href="/login", class=(currentPath.startsWith('/login') ? 'nav__link--active' : '')) Log In

    .content
      block content
        p This is the default!

    block scripts

然后我有一个控制器,它根据它的 slug 发送一些用户:

exports.getUserBySlug = async (req, res, next) => {

  const user = await User.findOne({ slug: req.params.slug })
  let embed = {}
  if (!user) return next();


  res.render('user', {
    user,
    title: user.name,
    embed: embed.html,
  });
};

还有我的应用程序上的一个配置,它总是为我提供登录用户,我可以在 pug 中使用它user

// pass variables to our templates + all requests
app.use((req, res, next) => {
  res.locals.h = helpers;
  res.locals.flashes = req.flash();
  res.locals.user = req.user || null;
  res.locals.currentPath = req.path;
  next();
});

问题:我该怎么做才能在导航栏上始终显示登录用户?

标签: node.jsexpress

解决方案


我不得不改变这一行:

res.locals.user = req.user || null;

至:

res.locals.loggedinUser = req.user || null;

并在我的模板上使用 loggedinUser


推荐阅读