在Handlebars Partial View中丢失持久用户

时间:2017-12-13 18:35:46

标签: node.js express passport.js express-handlebars

NodeJS使用Passport进行用户身份验证,Handlebars作为模板引擎,我已经插入了一些中间件,确保req.user在所有应用的视图中都可用:{{ user }}

app.use(function(req, res, next) {
  res.locals.user = req.user;
  next();
});

这适用于主要布局和其他所有视图,但是当我在局部视图中时似乎{{user}}不可用。

在主布局中,我可以检查用户是否存在,如果存在,则显示某些菜单项:

    {{#if user}}
        ...
    {{/if}}

在我的索引中,{{ user }}仍然可用,我会像这样调用部分:

{{#if posts}}
    {{#each posts as |post|}}
        {{> post post }}
    {{/each}}
{{/if}}

注意 - 我添加posts as |post|因为我认为我可以将postuser传递给局部视图,但它只允许一个参数< / EM>

在局部视图中,永远不会呈现以下代码:

{{#if user}}
    <a href="#" class="vote-up" data-id="{{ id }}"><img src="../../assets/icons/good.png" alt="discUp" class="discup"></a>
{{/if}}

我尝试过将用户发送到局部的不同方式 - 我觉得这是一种可接受的(虽然可能不是理想的)处理方法。但不确定我在Handlebars文档中遗漏了什么。我以为{{#with}}是票。

1 个答案:

答案 0 :(得分:0)

如果您正在使用npm库'hbs',则需要包含以下行:

hbs.registerPartials(__dirname + '/views/partials');

为了注册您的部分内容。

如果使用快速把手,那么您可能需要做与

相同的事情
app.engine('.hbs', exphbs({
    extname: '.hbs',
    partialsDir = path.join(__dirname, "views/partials/")
}));