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

3

我刚开始熟悉Hapi。 Hapi使用插件向应用程序添加组件。我很难理解为什么我要使用插件,而不是像这样做:

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

两者之间有什么区别?
1个回答

6

Hapi插件

Hapi插件也是Node模块,但它们是根据Hapi插件API构建的模块(它们公开了一个register方法,用于向您的Hapi pack/server注册插件)。

插件可以自动向您的服务器添加路由,更改请求、有效载荷和响应,并通常可以更改Hapi的行为。因此,简而言之,插件是专门编写以增强Hapi功能的Node模块。

让我们看一下两个包loutLo-DashLo-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.registerlodash一起使用没有意义,会导致错误。 因此,这样做是行不通的 -
server.pack.register({ 
        plugin: require('lodash')
    }, function() {
        server.start();
    }
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接