【问题标题】:Passport local - Cannot read property 'email' of undefined本地护照 - 无法读取未定义的属性“电子邮件”
【发布时间】:2015-01-07 07:55:04
【问题描述】:

我在我的应用程序中使用Passport。当我渲染视图以显示用户信息时,我能够在该视图中显示用户信息(我正在使用玉,顺便说一句):

#user
  p #{user.fname} #{user.lname)

但是,该视图扩展了一个布局,并且在该布局中,我无法访问用户变量。我的最终目标是在布局中有导航栏并显示一些与用户相关的项目。我知道我可以在我的块中设置变量,但我不想在每个视图中都设置它们(这似乎比应有的重复得多,而且似乎是错误的做事方式)。如何让我的用户信息在我的视图扩展的布局中可用并在一个地方完成?

layout.jade

...

#user
  if(user != null)
    ul.nav.navbar-right.navbar-nav
      li.dropdown
        a.dropdown-toggle(href='#', data-toggle='dropdown') #{user.email} <--BREAKS HERE

...

user.jade

extends layout

...

#user
  h1.title Welcome #{user.email} <--WORKS FINE HERE

...

【问题讨论】:

  • 你能发布布局和视图的相关部分吗?这将有助于排除故障

标签: node.js express pug passport.js


【解决方案1】:

layout.jade

block header

    #user
      if(user != null)
          ul.nav.navbar-right.navbar-nav
              li.dropdown
                  a.dropdown-toggle(href='#', data-toggle='dropdown') #{user.email}

block content


要么

layout.jade

block header
    #user
      if(user != null)
          ul.nav.navbar-right.navbar-nav
              li.dropdown
                  a.dropdown-toggle(href='#', data-toggle='dropdown') 
                      | #{user.email}

block content



user.jade

extends layout

block content
    #user
        h1.title Welcome #{user.email}

【讨论】:

  • 检查user 不是问题。问题是 user 未在 layout.jade 中定义,因此 user 将始终为空。我的问题更多是关于如何将user 全局公开一次,以便所有布局和视图都可以使用它(当然,当用户登录时)。
  • 如果用户对 user.jade 可用(你写了 user.js 但我假设这是一个错字),那么它对任何其他在其中扩展的玉文件都可用。尝试我添加的其他选项
  • 是的,这两个选项都不起作用。 if(#{user} != null) 实际上会产生错误Unexpected token ILLEGAL
  • 让我们做一些故障排除。从 layout.jade 中删除所有代码并插入以下行并查看用户变量是否显示“h1.title Welcome #{user.email}”
  • 不。我收到错误Cannot read property 'email' of undefined
猜你喜欢
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 2019-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多