Express res.locals 和哈巴狗没有按预期工作
Express res.locals and pug not working as expected
我的 app.js 中有以下功能,使用户 ID 可用于 pug 模板。
app.use(function (req, res, next) {
res.locals.currentUser = req.session.userId;
next();
});
登录后我可以访问该 ID。但是当没有登录时,我的哈巴狗模板中的条件不起作用。这是我的哈巴狗模板中的代码
if {currentUser}
//do something
else
//do something else.
else
部分没有触发。我已经记录了变量 currentUser
,它是一个 object
。当我使用 pug 模板中的 JSON.stringify({currentUser})
时,它会输出 {}
登录时currentUser
returns一个字符串id,注销时currentUser
returns一个空对象。两者都通过 if{currentUser}
子句。
有人可以帮忙吗?
问题出在您的 if
签入 pug 模板:
if {currentUser}
将始终计算为真。当 currentUser
未定义时,您的 if {currentUser}
转换为 if({})
,计算结果为 true
这是因为 {}
是一个 truthy
值。当 强制 到 Boolean
时,它的计算结果为 true
.
if ({}) console.log('yes')
console.log(Boolean({}))
将其更改为 if currentUser
(没有大括号)
我的 app.js 中有以下功能,使用户 ID 可用于 pug 模板。
app.use(function (req, res, next) {
res.locals.currentUser = req.session.userId;
next();
});
登录后我可以访问该 ID。但是当没有登录时,我的哈巴狗模板中的条件不起作用。这是我的哈巴狗模板中的代码
if {currentUser}
//do something
else
//do something else.
else
部分没有触发。我已经记录了变量 currentUser
,它是一个 object
。当我使用 pug 模板中的 JSON.stringify({currentUser})
时,它会输出 {}
登录时currentUser
returns一个字符串id,注销时currentUser
returns一个空对象。两者都通过 if{currentUser}
子句。
有人可以帮忙吗?
问题出在您的 if
签入 pug 模板:
if {currentUser}
将始终计算为真。当 currentUser
未定义时,您的 if {currentUser}
转换为 if({})
,计算结果为 true
这是因为 {}
是一个 truthy
值。当 强制 到 Boolean
时,它的计算结果为 true
.
if ({}) console.log('yes')
console.log(Boolean({}))
将其更改为 if currentUser
(没有大括号)