我只是想用Jade(0.20.3)和Express(2.5.8)在输入字段中显示一个值:
input(name='username', type='text', id="username", value=username)
这很简单,但是当值未定义时会抛出错误:
username is not defined
但是,文档指出:
When a value is undefined or null the attribute is not added, so this is fine, it will not compile 'something="null"'.
有什么我会做错的吗?
答案 0 :(得分:6)
简短回答:如果您不确定locals.someVar
是否存在,请使用someVar
。
更长的答案:
我认为Brandon的初始答案和最后评论是正确的(尽管不需要#{...}
语法),但是要详细说明:传入变量之间存在差异(技术上,对象属性) )值为undefined
,并且根本不传递该变量。
因为Jade会将您的模板转换为JS源代码并将eval
转换为with
块(在ReferenceError
块的上下文中),您必须确保您没有引用任何避免变量的变量被传入,或者他们将被传入。 This blog post有一些关于未定义与未声明变量和// ok, even if req.session.username is not defined
res.render('index', { username: req.session.username })
// ditto
res.local('username', req.session.username);
res.render('index')
的背景信息。
如果您执行以下任一操作,您的Jade模板应该可以正常工作:
res.locals(req.session) //if no username property exists
res.render('index', { /* no username */ } )
但这些不起作用:
locals
如果手动传入您可能想要引用的每个参数是不切实际的,您可以将模板中的变量称为locals.username
对象上的属性(例如{{1}})
答案 1 :(得分:1)
您必须确保将用户名传递到Jade模板。例如:
app.get('/', function (req, res) {
res.render('index', { title:'APP NAME', username: req.session.username });
});
此外,您可以在Jade模板中将其称为:#{username}