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
传递给局部视图,但它只允许一个参数< / 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}}是票。
答案 0 :(得分:0)
如果您正在使用npm库'hbs',则需要包含以下行:
hbs.registerPartials(__dirname + '/views/partials');
为了注册您的部分内容。
如果使用快速把手,那么您可能需要做与
相同的事情app.engine('.hbs', exphbs({
extname: '.hbs',
partialsDir = path.join(__dirname, "views/partials/")
}));