【问题标题】:Pattern for injecting plugin options into Hapi route handlers defined in separate files将插件选项注入到单独文件中定义的 Hapi 路由处理程序的模式
【发布时间】:2018-10-29 01:55:11
【问题描述】:

我正在开发我的 Hapi 应用程序插件,我的路线保存在一个单独的文件中,与执行插件 server.route 调用的文件不同。此外,这些路由的处理程序也在单独的文件中。例如

- plugin.js
- routes.js
- handlers/
    - route1.js
    - route2.js

plugin.js 类似于 ....

const routes = require('./routes.js')
...
server.route(routes)

routes.js 类似于 ...

module.exports = [
  { 
    method: 'GET', 
    path: '/route1', 
    handler: require('./handlers/route1')
  },
  ...
]

处理程序文件导出带有签名(request, h)的函数。

我的路由处理程序(及其他)需要访问插件注册时传入的选项,但他们只能访问(request, h)

我可以使用将options 纳入范围的函数来包装路由定义和每个路由处理程序,但这感觉就像定义有关项目结构的约定和民间传说,而且我觉得它可能会导致 Javascript 范围界定问题/关闭怪异。

是否有一个通用的 Hapi 库/模式允许我将插件选项注入到路由处理程序中,例如允许以干净或明确的方式签名,如(request, h, options)

【问题讨论】:

  • 您始终可以使用server.decorate 通过插件将变量公开给处理程序。即server.decorate('server', "key", "val"); 然后在路由中您可以通过以下方式访问:request.server.key

标签: design-patterns plugins routes hapijs


【解决方案1】:

所以我发现工具包对象上的插件选项如下...

h.realm.pluginOptions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多