3

刚开始熟悉 Hapi。Hapi 使用插件将组件添加到您的应用程序。我很难理解为什么当我可以做类似的事情时我会使用插件:

var lib = require('whatever lib from npm');

两者有什么区别?

4

1 回答 1

6

Hapi 插件也是节点模块,但它们是根据 Hapi 插件 API 构建的节点模块(它们公开了一个注册方法,将插件注册到您的 Hapi 包/服务器)

插件可以自动将路由添加到您的服务器,更改请求、有效负载和响应,并且通常可以更改 Hapi 的行为方式。

所以简而言之,插件是专门为增强 Hapi 而编写的 Node 模块。

让我们看看两个包loutLo-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 服务器以及它是如何工作的,它只是用作帮助程序,程序员需要知道如何将它们拼接在一起。

调用lodashwithserver.pack.register将没有任何意义,并且会导致错误。所以这行不通-

server.pack.register({ 
        plugin: require('lodash')
    }, function() {
        server.start();
    }
);
于 2014-11-18T01:44:11.940 回答