2013-05-28 134 views
3

我正在構建一個服務,在必要時需要多個模塊之間分割。 我需要從我的所有模塊中的路由器訪問「請求」變量。將變量傳遞到所有模塊

我當前的解決方案(其已經提出在其他線程用於一般傳遞變量)是將它傳遞給每個必需的模塊:

變種a_module =要求(「./ a_module」)(REQ) ;

和出口各個模塊的功能:

module.exports =功能(REQ){ ... }

但它是繁瑣,涉及不必導出我的模塊作爲函數,並且只能在導出函數的範圍內訪問此變量。理想情況下,我希望能夠在整個所需模塊中訪問變量。

有沒有其他優雅的方式來做到這一點,我失蹤了?像在整個應用程序中聲明req變量爲全局一樣?

+0

您是使用Express還是隻使用普通的NodeJS? –

+0

是的,我正在使用Express – gwendall

+1

與PHP不同,節點在同一進程中異步處理多個請求。如果將'req'設置爲全局的,並且同時處理了多個請求,那麼'req'就會被破壞,所以我認爲除非它們是常量和通用的,否則我不認爲應該使用全局變量。 –

回答

3

這個問題是要徵求意見而不是答案,所以它不適合堆棧溢出,但這裏是我的0.02美元。

您需要退後一步,問自己是否真的寫了很多需要訪問請求對象的模塊。我不認爲你有。你應該寫的是能夠接收他們需要的特定數據的函數 - 不多也不少。所有這些功能幾乎肯定不需要整個請求。例如,他們中有多少人真的需要訪問每個HTTP頭?將您的程序看作一組關於域對象/數據的操作。例如,也許有一種功能需要用戶帳戶記錄並將其從普通用戶推薦給管理員。所有該功能需要的是用戶帳戶。它不應該耦合到HTTP請求對象。

只需編寫一堆乾淨的解耦函數,它們需要少量的精確參數並對它們做一些有用的操作。這被稱爲「鬆耦合」。然後將相關功能組織到一個模塊中。這被稱爲「凝聚力」。然後使用一些「粘合」代碼從HTTP req對象中提取必要的參數,並將它們作爲參數傳遞給這些函數。這些相同的功能應該適用於命令行界面或另一個非HTTP界面。如果你以這種方式對它們進行編碼,它們將更容易理解,測試並且更加長壽,而不是每個模塊的每一行都知道當前HTTP req對象。

+0

非常好的答案,謝謝! – gwendall