從非節點背景的人,我的第一直覺是定義我的服務爲這樣的NodeJS快遞依賴注入和數據庫連接
MyService.js
module.exports = new function(dbConnection)
{
// service uses the db
}
現在,我想每個請求一個開放式數據庫連接,所以我在中間件定義:
res.locals.db = openDbConnection();
而且在一些消費快速API代碼:
api.js
var MyService = require(./services/MyService')
...
router.get('/foo/:id?', function (req, res) {
var service = new MyService(res.locals.db);
});
現在,因爲Node的依賴注入的首選方法是通過require(...)
聲明,所以我似乎不應該使用MyService
的構造函數來注入db
。
所以我們可以說我希望有
var db = require('db');
在MyService
頂部,然後用某種方式像db.current
....但我怎麼會扎到當前res.locals
對象的數據庫,現在db
是模塊本身?在Node中處理這種瘦的建議方式是什麼?
正確,但現在我的構造函數或MyService中的方法需要db作爲參數。由於我們正在討論如何「接近」節點中的依賴關係/需求,所以我期望需要('db')....並且因爲您從未見過新的MyService ......您期望什麼呢? – Jeff
嘿傑夫,我想我更瞭解你的問題。我相應地更新了我的答案。如果我離得更近,請告訴我! – Brennan