0

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|是因为我认为我可以将post和传递user给局部视图,但它只允许一个参数

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

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

我已经尝试过将用户发送到部分的不同方式——我觉得这是一种可以接受的(尽管可能不是理想的)处理方式。不过,不确定我在 Handlebars 文档中遗漏了什么。我以为 {{#with}} 是票。

4

1 回答 1

0

if you're using the npm library 'hbs', you need to include the line:

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

in order to register your partials.

if using express-handlebars then you may need to do the same thing as

app.engine('.hbs', exphbs({
    extname: '.hbs',
    partialsDir = path.join(__dirname, "views/partials/")
}));
于 2017-12-14T02:52:09.347 回答