hapi.js插件和nodejs模块之间有什么区别

时间:2014-11-18 01:01:52

标签: node-modules hapijs

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

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

两者有什么区别?

1 个答案:

答案 0 :(得分: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服务器及其工作原理它只是用作帮助程序,程序员需要知道如何将它们拼接在一起。

使用lodash调用server.pack.register没有任何意义,会导致错误。 所以这不会起作用 -

server.pack.register({ 
        plugin: require('lodash')
    }, function() {
        server.start();
    }
);