背景
Hapi.js 是一款优秀的 Node.js Web 框架,其内置支持 Handlebars 模板引擎,能够方便地进行前后端分离的开发。然而,在使用 Handlebars 时,有时会遇到一个比较棘手的问题:Helper 未找到。
问题描述
当我们在 Handlebars 模板中使用一个未定义的 Helper 时,Hapi.js 会抛出 Missing helper: "xxx"
的异常。例如,我们想要在模板中使用一个名为 toUpper
的 Helper,但是没有定义该 Helper。此时,当我们访问该页面时,会出现类似如下的报错信息:
Debug: internal, implementation, error Error: Missing helper: "toUpper" at eval (eval at internals.compile (/Users/mysite/node_modules/handlebars/lib/handlebars.js:466:19), <anonymous>:120:19) at handlebars (/Users/mysite/node_modules/handlebars/lib/handlebars.js:478:21) at internals.View.render (/Users/mysite/node_modules/@hapi/vision/lib/view.js:80:35)
这时就需要我们来解决这一问题。
解决方案
方案一:安装 Helper
一个简单的解决方法是,安装对应的 Helper,这样就可以成功使用该 Helper 了。这里以示例 Helper toUpper
为例。
我们需要先安装对应的 Helper 模块包:
npm install handlebars-helper-uppercase --save
然后在 Hapi.js 服务器启动时,我们需要将该 Helper 挂载到 Handlebars 引擎中:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - ------------------------ ----- ---------- - ---------------------- ----- ------- - --------------------------------------- -- -- ------- ------ ----- ------ - --- -------------- ----- -------- ------- - ----- ------------------------ -- ------ -------------- -------- - --- ----------- -- ----------- ---------- ----- ---------- ----------- ----------------- ------- ---------- ------------ ------------------ -- -- ------ -- --------- ------ --- ------------------------------------ --------- -- - ------ --- ---------- --- ----- --------------- ------------------- ------- --- --------------------- - --------
此时,我们再次访问使用 toUpper
Helper 的页面时,就不再会抛出 Missing helper
的异常了。
方案二:自定义 Helper
如果我们需要使用的 Helper 比较简单,可以考虑自己定义一个 Helper。
在 Handlebars 引擎中,定义 Helper 可以通过 Handlebars.registerHelper
方法来实现。例如,我们需要自定义 toUpper
Helper,可以这样写:
Handlebars.registerHelper('toUpper', function (text) { return text.toUpperCase(); });
这里我们注册了一个名为 toUpper
的 Helper,在调用时可将字符串参数转换为大写格式。
总结
本文介绍了在 Hapi.js 框架使用 Handlebars 模板引擎时,出现 Helper 未找到问题的解决方案。我们可以通过安装对应的 Helper 模块包或自定义 Helper 来解决问题。对于前端开发者而言,了解此类问题的解决方法可以提高开发效率,减少不必要的烦恼。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648fd03148841e9894df7a96