2016-07-26 44 views
0

我有這個Hapi.js服務器需要2個端點來執行基本身份驗證(使用hapi-auth-basic模塊)。用於檢查「用戶名/密碼」的每個端點邏輯是不同的,所以我已經將這兩件事分解到他們自己的插件中。Hapi,js - 在插件中包含插件的正確方法

目前,我這是怎麼註冊的插件:

... 
 

 
server.register([Basic, 
 
... 
 
    require('./auth/register-device'), 
 
    require('./auth/sender'), 
 
... 
 
], (err) => { 
 
.... 
 

雖然這工作,我必須確保基本插件也被註冊。

我試圖註冊在我的插件基本插件在此登記方法(我已經刪除並移動到上面的文件):

https://github.com/salty-pig/Salty-Pig/blob/master/auth/sender.js#L29,但是當我這樣做兩個插件,我得到了錯誤基本插件已經註冊。

我想我想知道這裏的最佳做法應該是什麼。就我而言,這是有效的,因爲我沒有發佈這些「auth」插件。

問題2會是:如果我有一個插件,我想成爲一個npm模塊,需要包括另一個插件,那麼最佳做法是什麼。

感謝

+0

不知道這是什麼意思,'我必須確保基本插件也正在註冊'。你正試圖在Basic和Sender之間建立一個循環依賴關係,不是嗎? – estus

+0

我不這麼認爲。 Sender插件確實需要Basic插件才能工作,但Basic插件不需要Sender插件。我的意思是,發件人和註冊設備插件的工作,我需要先註冊基本插件,我試圖在每個其他插件註冊基本插件,但那是當我有關於基本插件的錯誤已經正在註冊 – lholmquist

+0

瞭解如何正確處理這個問題也很有趣。我的猜測是,這種行爲可以通過'once'選項[here](http://hapijs.com/api#serverregisterplugins-options-callback),'once'和'multiple'選項[here(http: //hapijs.com/api#plugins)。 – estus

回答

2

如果你正在寫的是依賴於其他插件插件,您可以使用Hapi server.dependency API

exports.register = function (server, options, next) { 
    server.dependency('hapi-auth-basic', function(server, next) { 
    server.register([ 
     // register plugins that depend on hapi-auth-basic here 
    ], (err) => { 
    }); 
    }); 

    next(); 
}; 

你可以用一個陣列供給server.dependency指定多個依賴性。