如何将请求生命周期事件封装在 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"。它更像是一种更好地封装代码的方法。
将您的代码组织到插件中可以为您做一些事情。
- 迫使您更严格地封装功能
- 更容易跨项目重用代码
- 将您的所有功能加载到 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 模块跨越不同的项目。
我刚开始使用 hapi.js,我喜欢请求生命周期事件,我阅读的每个教程/指南都像这样显示它们:
server.ext('onPreResponse', (request, reply) => {
// ... these are great.
});
但显然,我不想在主脚本的 server.register
中注册它们。我能做到:
const lifecycle = require('./server/lifecycle');
server.ext('onPreResponse', lifecycle.onPreResonse);
但是有没有办法进一步封装它,让我的主脚本保持精简,嗯……干净?
最有效的方法也是首选方法,将功能封装在插件中。不要把一个hapi插件当成传统的"Plugin"。它更像是一种更好地封装代码的方法。
将您的代码组织到插件中可以为您做一些事情。
- 迫使您更严格地封装功能
- 更容易跨项目重用代码
- 将您的所有功能加载到 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 模块跨越不同的项目。