我只是想用Jade(0.20.3)和Express(2.5.8)在输入字段中显示一个值: input(name='username', type='text', id="username", value=username) 这很简单,但是当值未定义时会抛出错误: username is not defined 但是,文档指
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"'.
有什么我会做错的吗?
简短回答:如果您不确定someVar是否存在,请使用locals.someVar.更长的答案:
我认为Brandon的初始答案和最后评论是正确的(尽管不需要#{…}语法),但是要详细说明:传递一个变量(技术上,一个对象属性)与之间存在差异值未定义,并且根本不传递该变量.
因为Jade将您的模板转换为JS源并且将其转换(在with块的上下文中),您必须确保您没有引用任何尚未传入的变量,或者它们将是. This blog post有一些关于undefined vs unclared变量和ReferenceError的背景知识.
如果您执行以下操作之一,您的Jade模板应该可以正常工作:
// 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')
但这些不起作用:
res.locals(req.session) //if no username property exists res.render('index', { /* no username */ } )
如果手动传入您可能想要引用的每个参数是不切实际的,可以将模板中的变量称为locals对象的属性(例如locals.username)