首页 > 解决方案 > Express res.locals 和 pug 没有按预期工作

问题描述

我的 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. 当我JSON.stringify({currentUser})从哈巴狗模板使用它输出{}

登录时currentUser返回字符串 id,注销时currentUser返回空对象。两者都通过了该if{currentUser}条款。

有人能帮忙吗?

标签: javascriptexpresspug

解决方案


问题在于您if签入哈巴狗模板:

if {currentUser}将始终评估为真。您if {currentUser}转换为if({})whencurrentUser未定义,其计算结果为true

这是因为{}是一个truthy值。当强制Boolean它评估为true.

if ({}) console.log('yes')

console.log(Boolean({}))

将其更改为if currentUser(不带大括号)


推荐阅读