2016-04-05 71 views
3

註冊Hapi插件與通過服務器上下文使底層節點模塊可用(假設插件沒有爲模塊添加太多功能)有什麼優勢嗎?例如,爲MySQL我可以註冊一個HAPI MySQL的插件Hapijs插件vs server.bind

server.register({ 
    register: require('hapi-mysql'), 
    options: { 
    host: "localhost", 
    user: "test", 
    password: "test" 
    } 
}, (err) => { 
    if(err) { 
    throw err; 
    } 
}); 

,然後通過服務器變量

var dbPool = server.plugins['hapi-mysql'].pool; 

另一種方法是創建的MySQL池直接

var mysql = require('mysql'); 
var pool = mysql.createPool({ 
    connectionLimit : 10, 
    host   : 'localhost', 
    user   : 'test', 
    password  : 'test' 
}); 
的實例訪問它

並將其綁定到服務器上下文

server.bind({dbPool: pool}); 

我個人比較喜歡第二種方法(server.bind),但要確保我不會失去了一些東西

回答

1

傳遞一個數據庫連接池比如通過server.bind的情況下是沒有錯的,這可能是需要的資源應用程序的大部分部分都會提供更方便的訪問。雖然建議如果你只有一個插件,你正在工作。 check Hammer's comment,server.app將是替代方案。

服務器的方法是在你的服務器所使用的常用工具,但最好 不與他們交插件的界限,以減少依賴。

一般來說,如果您發現自己使用了很多自己的應用程序插件之間的很多依賴關係,那麼您就錯了。

所以插件是模塊化的組件,它們自己的業務邏輯與系統的任何其他部分都分離開來,如果你的應用程序變得更大,它可以是正確的解決方案。