Javascript 如何在Hapi.js中封装请求生命周期事件?

Javascript 如何在Hapi.js中封装请求生命周期事件?,javascript,node.js,hapijs,Javascript,Node.js,Hapijs,我刚开始使用hapi.js,我喜欢请求生命周期事件,我阅读的每个教程/指南都向他们展示了如下内容: server.ext('onPreResponse', (request, reply) => { // ... these are great. }); 但是很明显,我不想在我的服务器中注册它们。在我的主脚本中注册。我可以做到: const lifecycle = require('./server/lifecycle'); server.ext('onPreResponse',

我刚开始使用hapi.js,我喜欢请求生命周期事件,我阅读的每个教程/指南都向他们展示了如下内容:

server.ext('onPreResponse', (request, reply) => {
    // ... these are great.
});
但是很明显,我不想在我的
服务器中注册它们。在我的主脚本中注册
。我可以做到:

const lifecycle = require('./server/lifecycle');
server.ext('onPreResponse', lifecycle.onPreResonse);

但是有没有一种方法可以进一步封装它,以保持我的主脚本精练,并且。。。清理?

最有效的方法,也是首选的方法,是将功能封装在插件中。不要认为hapi插件是传统的“插件”。这更像是一种更好地封装代码的方法

将代码组织到插件中可以为您做一些事情

  • 强制您更严格地封装功能
  • 使跨项目的代码重用更容易
  • 将您的所有功能加载到hapi中更加简洁和直接
  • 下面是一个示例,说明您的插件可能是什么样子:

    exports.register = (server, options, next) => {
    
      server.ext('onPreResponse', (request, reply) => {
        // ... these are great.
      });
    
      next()
    }
    
    exports.register.attributes = {
      name: 'great-things',
      version: '1.0.0'
    }
    

    事实上,当我使用hapi构建网站时,我将所有功能放入
    /app/plugins
    目录中的插件中,然后如果需要在不同的项目中重用它们,将它们分解成单独的Node.js模块

    使用插件。在插件的
    register
    方法中,只注册该插件所需的生命周期事件-。虽然插件非常吸引人,但我希望不要为此注册插件。这是唯一的办法吗?或者“它是如何完成的”?很清楚,当我说我所有的代码都在插件中时,这并不完全公平。我有一个带有路由配置和处理程序的
    /app/routes
    文件夹,但是所有路由都是通过一个插件加载的,该插件只需加载
    /app/routes
    目录中的每个文件,并使用
    服务器将它们加载到hapi中。路由(…)
    我们的设置类似-启动脚本下面的所有内容都是一个插件。Launch设置hapi,然后注册顶级插件,每个插件都注册自己的插件,以此类推。项目结构由带有index.js文件和插件文件的目录组成。索引也是一个插件,可以在目录中注册其他插件,所以您只需要该目录并在其上调用register。@Robbie-看一看。这是一个用于hapi的CLI,用于使用纯配置引导hapi。它不适合所有人,但对于大型团队,它有助于防止索引或服务器文件膨胀,因为它不存在。一切都必须是一个插件。