【发布时间】: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