2017-05-26 154 views
0

我對nodejs相當陌生。編寫我的第一份申請。我很習慣於PHP。在NodeJS模塊中使用模塊

爲了保持代碼的組織和清潔,我總是在不同的文件中編寫函數,並將它們包含在php中。

但是,在nodejs我不得不要求他們,就像我會需要一個模塊。例如, 。

functions.js

module.exports = { 
check_db : function(key){ 

}, 

check_cache : function(key){ 
    memcached.get(key,function(err, data){ 
     console.log(data); 
    }); 
}, 

};

包括在像這樣

// Establish connection with cache and database 
const mysql = require('mysql2'); 
const Memcached = require('memcached'); 
const memcached = new Memcached('localhost:11211'); 
const bb = require('bot-brother'); 

//Load the database cache functions 
const dbc = require("./functions"); 
dbc.check_cache(123); 

主要的應用程序,現在我可以DBC從主應用程序文件訪問功能,但我不能使用已在主應用程序被要求從功能模塊文件。 我收到一個memcached沒有定義的錯誤。

我該如何解決這個問題?

+0

的可能的複製[Node.js的 「需要」 的功能和參數(HTTPS ://stackoverflow.com/questions/7367850/node-js-require-function-and-parameters) –

回答

0

簡單的解決方案,你可以在functions.js文件中require("memcached")並在這裏創建服務器。但是我不會用這個解決方案,因爲如果你需要在其他地方使用memcache,你可能會在memcache服務器上打開很多連接。

IMO和另一個更清潔的解決方案是將Memcache依賴關係注入您的服務(或稱爲functions)。 (這種做法被稱爲依賴注入,如果你想了解它,什麼是它的好處)

下面是它如何工作的:

  • 你仍然創造主的內存緩存的連接檔案
  • ,而不是在你的functions.js導出原始JSON對象,導出一個函數,需要一個參數(這裏memcache
  • 在你的主文件,你需要的功能和調用它來得到你想要的服務。

下面是代碼會是什麼樣子:

main.js

//Load the database cache functions 
const dbcFactory = require("./functions"); 
const dbc = dbcFactory(memcached) 

functions.js

module.exports = function (memcached) { 
    return { 
    check_db : function(key){}, 

    check_cache : function(key){ 
     memcached.get(key,function(err, data){ 
     console.log(data); 
     }) 
    } 
}; 
+0

是不依賴注入從長遠來看,你有可能不得不傳遞越來越多的依賴關係? –

+0

DI(依賴注入)的主要優點是**一切都是顯式**,並且每個服務都可以輕鬆測試(可以在測試環境中注入模擬依賴關係)。我想說,如果你的代碼與DI混亂,它揭示了你的一般體系結構的問題,你可能需要重新考慮一些部分:) – atomrc

+0

它需要你寫更多的代碼,這是真的,但明確肯定會改變你的代碼的可讀性和可理解性 – atomrc