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

Express & jade (node.js) - variable is not defined error when checking for existence

本文关键字:存在 是否 检查 错误 未定义 变量 amp jade js node Express      更新时间:2023-09-26

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

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

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

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

编辑:忘了说错误是在哪一行触发的,它是在第二行"- if(用户)"上触发的。

正如在另一个答案中提到的,Jade 文档的公共 API 部分说locals变量是将数据传递到 Jade 模板的方式。在云雀上,我在玉石模板中用 locals 预置了我的变量。这正确地绕过了错误。

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

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

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

尝试

if(typeof obj != 'undefined')

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'))
...

页面.翡翠

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

容易吃豆。