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

use*_*911 3 node-modules hapijs

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

var lib = require('whatever lib from npm');
Run Code Online (Sandbox Code Playgroud)

两者有什么不同?

Yon*_*Jah 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();
    }
);
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我们需要做的就是将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();
    }
);
Run Code Online (Sandbox Code Playgroud)

这里我们lodash用来扩展我们的服务器设置并配置我们的服务器,如果我们在运行服务器时设置DEBUG环境参数,则将错误记录到控制台.请注意,lodash我们不知道我们的Hapi服务器及其工作方式,它只是用作帮助程序,程序员需要知道如何将它们拼接在一起.

调用lodashserver.pack.register将没有任何意义,并会导致错误.所以这不会工作 -

server.pack.register({ 
        plugin: require('lodash')
    }, function() {
        server.start();
    }
);
Run Code Online (Sandbox Code Playgroud)