刚开始熟悉Hapi。 Hapi使用插件为您的应用程序添加组件。我很难理解为什么我会使用插件,因为我可以做类似的事情:
var lib = require('whatever lib from npm');
两者有什么区别?
答案 0 :(得分:6)
Hapi插件也是节点模块,但它们是根据Hapi插件API构建的节点模块(它们公开了一个注册方法,用Hapi包/服务器注册插件)
插件可以自动添加路由到您的服务器,更改请求,有效负载和响应,并且通常可以改变Hapi的行为方式。
因此,简而言之,插件是专门为增强Hapi而编写的Node模块。
让我们看看两个包lout
和Lo-Dash
。
您可能知道的Lo-Dash
模块是高性能的js工具集。
lout
是一个Hapi插件,可以为您的应用添加/ doc路由。
你可以在npm找到它们,让我们从lout
-
var Hapi = require('hapi'),
lout = require('lout'),
server = new Hapi.Server(80);
server.pack.register({
plugin: lout
}, function() {
server.start();
}
);
正如您所看到的,我们需要做的就是将lout注册到我们的服务器包中,并且我们可以使用它的所有魔法(一些插件需要更多选项)
现在让我们在代码中使用lodash
var Hapi = require('hapi'),
lout = require('lout'),
_ = require('lodash'),
preset = { app: { name: "myApp"}},
server;
if (process.env.DEBUG) {
_.extend(preset, {debug: {request: ['error']});
}
server = new Hapi.Server(80, preset);
_.extend(preset, { endpoint: '/lout'});
server.pack.register({
plugin: lout
}, function() {
server.start();
}
);
这里我们使用lodash
来扩展我们的服务器设置并配置我们的服务器,以便在运行服务器时设置DEBUG环境参数时将错误记录到控制台。
请注意lodash
不知道我们的Hapi服务器及其工作原理它只是用作帮助程序,程序员需要知道如何将它们拼接在一起。
使用lodash
调用server.pack.register
没有任何意义,会导致错误。
所以这不会起作用 -
server.pack.register({
plugin: require('lodash')
}, function() {
server.start();
}
);