我的模塊會注入貓鼬實例,但現在它們都使用在最後一隻貓鼬上設置的數據庫。在模塊中注入獨特的貓鼬實例
例如,我的主模塊創建了很多模塊,然後調用它們的init。
var mongoose = require('mongoose');
//...
mongoose.connect(connString);//specific to finance
var finance = require('finance').init({db:mongoose});
之前,我本身注入貓鼬實例所需貓鼬的財務模塊,並因爲它是在node_modules它得到它自己的貓鼬。現在;無論我製作多少個主要模塊,以及我打電話多少次,都會得到第一次獲得的實例。
因此,創建的所有模塊都將連接到上次連接設置的任何模塊。
它是可以使用的createConnection,但仍然不知道如何注入貓鼬,我想:
var mongoose = require('mongoose');
//...
var c = mongoose.createConnection(connString);//specific to finance
mongoose.connection=c;
var finance = require('finance').init({db:mongoose});
現在,我得到一個錯誤like Cannot overwrite
金融model once compiled.
不知怎的,這是很難得到的另一個實例貓鼬在同一模塊。這很有趣,因爲根據貓鼬,你應該能夠爲不同的模型使用不同的連接,但是因爲你需要一個貓鼬實例來定義一個模型,那麼你如何注入它?需求不斷地一遍又一遍地返回相同的實例。
試過以下,但都沒有工作。
console.log('deleting mongoose cache:',require.cache.mongoose=undefined);
//or this one
console.log('deleting mongoose cache:',delete require.cache.mongoose);
所以問題是:如何在我的模塊中注入貓鼬,這些模塊需要獨特的數據庫?如果main設置了貓鼬實例和連接來注入模型,那麼我如何防止它一遍又一遍地創建同一個實例?
如果可以使用createConnection創建獨特的連接,那麼我會注入哪些模塊?有了這個連接,我不能創建模型,需要一個貓鼬實例。如果每個模型需要調用require來獲取它,那麼貓鼬是不可注射的。
謝謝彼得,我看到貓鼬公開構造貓鼬:http://mongoosejs.com/docs/api.html#index_Mongoose-貓鼬我會試試這個。構造函數是JavaScript在function.prototype上給你的東西,但可以重新設置。 – HMR 2014-12-05 01:20:32