从 index.js 到 node.js 传递变量的语法错误

Syntax Error passing a variable from index.js in node.js

我正在开发一个使用 node.js 和 pug 作为其模板引擎的网络地图站点。我正在尝试将一个变量从 index.js 传递到我的 map.pug 文件,特别是当用户登录该站点时包含 Google 登录信息的用户参数。

index.js 代码片段是:

app.get('/map', (req,res) => {
    res.render('map', {
        user: req.user,
        authenticated: req.isAuthenticated()
    });
});

map.pug 片段是:

var user
// Find out if the user is logged in & assign to "user" variable if so
if (!{JSON.stringify(authenticated)} == true) {
    user = !{JSON.stringify(user)};
} else {
    user = 'undefined';
};
console.log(user);

这在用户登录时工作正常,因为它将字典传递给 user 变量。当用户未登录时,req.userundefined,因此不会将任何内容传递给 user

这会导致以下语法错误:

Uncaught SyntaxError: Unexpected token ';'

即使 JSON.stringify 语句在 if 语句中?我试过使用 try...catch 来解决这个问题,但它对语法错误不起作用,所以我对如何解决这个问题有点困惑。

如您所述,问题是由于未通过身份验证时未设置用户变量。 (这会导致页面上呈现的脚本有 user = ; 这是一个语法错误)。如果在快速渲染函数中未定义 req.user,则可以通过设置默认值来解决此问题。

app.get('/map', (req, res) => {
    res.render('map', {
        authenticated: req.isAuthenticated(),
        user: req.user !== undefined ? req.user : {},
    })
});

以上将在未定义时将用户设置为空对象