我怎样才能在Hapi.js中封装请求生命周期事件?

时间:2016-03-02 19:56:08

标签: javascript node.js hapijs

我刚刚开始使用hapi.js而且我喜欢请求生命周期事件,我读过的每个教程/指南都是这样的:

server.ext('onPreResponse', (request, reply) => {
    // ... these are great.
});

但显然,我不想在我的主脚本server.register中注册所有内容。我能做到:

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

但是有没有办法进一步封装这个,以保持我的主要脚本精益,而且......干净?

1 个答案:

答案 0 :(得分:3)

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

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

  1. 强制您更严格地封装功能
  2. 在项目中更轻松地重用代码
  3. 将您的所有功能加载到hapi中更加清晰直接。
  4. 以下是插件内容的示例:

    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模块,如果我需要在不同的项目中重用它们。