当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 玉模板引擎中的未定义属性

来源:互联网 收集:自由互联 发布时间:2021-06-16
我只是想用Jade(0.20.3)和Express(2.5.8)在输入字段中显示一个值: input(name='username', type='text', id="username", value=username) 这很简单,但是当值未定义时会抛出错误: username is not defined 但是,文档指
我只是想用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"'.

有什么我会做错的吗?

简短回答:如果您不确定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)

网友评论