我刚开始熟悉Hapi。 Hapi使用插件向应用程序添加组件。我很难理解为什么我要使用插件,而不是像这样做:
var lib = require('whatever lib from npm');
两者之间有什么区别?
我刚开始熟悉Hapi。 Hapi使用插件向应用程序添加组件。我很难理解为什么我要使用插件,而不是像这样做:
var lib = require('whatever lib from npm');
Hapi插件也是Node模块,但它们是根据Hapi插件API构建的模块(它们公开了一个register方法,用于向您的Hapi pack/server注册插件)。
插件可以自动向您的服务器添加路由,更改请求、有效载荷和响应,并通常可以更改Hapi的行为。因此,简而言之,插件是专门编写以增强Hapi功能的Node模块。
让我们看一下两个包lout
和Lo-Dash
。
Lo-Dash
模块是高性能的JavaScript工具集。
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服务器是如何工作的,它只是作为一个帮助程序使用,而程序员需要知道如何将它们连接起来。server.pack.register
与lodash
一起使用没有意义,会导致错误。
因此,这样做是行不通的 -server.pack.register({
plugin: require('lodash')
}, function() {
server.start();
}
);