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

How could I encapsulate request lifecycle events in Hapi.js?

我刚开始使用 hapi.js,我喜欢请求生命周期事件,我阅读的每个教程/指南都像这样显示它们:

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

但显然,我不想在主脚本的 server.register 中注册它们。我能做到:

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

但是有没有办法进一步封装它,让我的主脚本保持精简,嗯……干净?

最有效的方法也是首选方法,将功能封装在插件中。不要把一个hapi插件当成传统的"Plugin"。它更像是一种更好地封装代码的方法。

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

  1. 迫使您更严格地封装功能
  2. 更容易跨项目重用代码
  3. 将您的所有功能加载到 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 模块跨越不同的项目。