快递& jade(node.js) - 检查存在时,变量未定义错误

时间:2012-05-22 20:16:16

标签: javascript node.js view pug

我在一个非常简单的快递应用上遇到了一个非常愚蠢的错误。我使用jade作为视图引擎,我这样说是为了防止它与问题有关。

我正在尝试检查变量是否已定义以呈现一个或另一个,但只是检查该变量会触发“变量未定义”错误。这不是我期望的行为,所以我想知道我做错了什么。这是我正在使用的视图代码:

h1= title
- if (user)
    p Welcome to #{title}, #{user.username}
- else 
    p Welcome to #{title}

这样做的正确方法是什么?必须有一种方法来检查视图上的变量。 : - /

编辑:忘记说错误被触发到哪一行,它在第二行“ - if(user)”上被触发。

3 个答案:

答案 0 :(得分:13)

正如另一个answer中提到的,Jade文档的Public API部分说locals变量是数据传递给Jade模板的方式。在云雀上,我使用locals将我的变量添加到玉石模板中。这正确地绕过了错误。

因此,以下Jade模板应解决您的错误:

h1= title
- if (locals.user)
    p Welcome to #{title}, #{user.username}
- else 
    p Welcome to #{title}

答案 1 :(得分:3)

您没有将p Welcome to #{title}; #{user.username}括在引号

尝试

if(typeof obj != 'undefined')

答案 2 :(得分:1)

layout.jade

# the following function is a safe getter/setter for locals
- function pagevar(key, value) { var undef; return (value===undef) ? locals[key] || null : locals[key] = value; }
block config
  #intended as a non-rendered block so that locals can be overridden.
  # put your defaults here... - use append in the child view
!!!
html
  head
    title=pagevar('title')
    meta(name='description',content=pagevar('description'))
...

page.jade

append config
  - locals.title = 'override';
  - locals.description = 'override 2';
  - pagevars('somekey', 'some value');
...

容易豌豆。