把手和csrf,自定义助手正在清除条件块内的res.locals

时间:2018-06-04 20:12:30

标签: express handlebars.js express-handlebars

我必须为express中的把手集成构建一个自定义助手。帮助程序查找订阅对象,然后评估该条件。但是,模板无法在该块中呈现res.locals变量。

我不完全理解把手助手以及options.fn和options.inverse的上下文,但我假设当这些被调用时,他们正在修改该助手中可用内容的上下文。 res.locals在我的助手之前和之后继续正常工作,只是没有。

我的助手定义如下:

hbs.registerHelper('is_subscribed', (ctx,options) => {
  if(ctx.subscription_level) {
    return options.fn(this)
  }
  return options.inverse(this)
})

is_subscribed是一个int,但即使它为0,它似乎也不适用于内置的if / else语句 我的模板使用它如下:

{{#if user}}
{{csrfToken}} // this display correctly
    {{#is_subscribed user}}

        <form method="POST" action="/">

            <input type="hidden" id="_csrf" name="_csrf" value="{{csrfToken}}" /> // this csrfToken DOESN'T render
        </form>
    {{else}}

    {{/is_subscribed}}
{{else}}

{{/if}}
{{csrfToken}} // This does render

csrfToken的分配方式与res.locals.csrfToken相同,正如我所说,它在辅助函数之前和之后正确显示。

我该如何解决这个问题?

****更新**** 我已经解决了我可以传回options.data.root并且它将传回原始的整页上下文,但这似乎不正确。所以我再次想知道最好的方法是什么。

0 个答案:

没有答案