Javascript 如何在Hapi.js中封装请求生命周期事件?
我刚开始使用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',
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。它不适合所有人,但对于大型团队,它有助于防止索引或服务器文件膨胀,因为它不存在。一切都必须是一个插件。