2016-10-22 68 views
0

我使用貓鼬與express.js重新使用貓鼬模型的策略

我設計的服務器是動態創建模型。

var schema = mongoose.Schema({ data: String }, { timestamps: true }); 

var model = mongoose.model(result.siteId, schema); 

    var data = new model({ 
     data: JSON.stringify(req.body) 
    }); 

    data.save(function (err, result) { 
     if (err) { 
      res.status(400).json({ 
       success: false 
      }); 
     } else { 
      res.status(200).json({ 
       success: true, 
       data: result 
      }); 
     } 
    }); 

這是創建模型的這一部分。 (數據輸入部分) 一旦服務器獲取請求,請求的siteId就是模型的名稱。它是適當的作品。 但問題是使用這個創建的模型。 我想要這個mongodb表。所以我重新聲明模型,但它不起作用。

var datas = mongoose.model('modelname', {data: String}); 

一旦聲明此模型。 '數據輸入部分'(高位代碼)不工作並停止服務器響應和超時消息。 但使用其他modelname的其他「數據輸入部分」正在工作。

我認爲貓鼬從redeclare模型停止。 我想聲明模型其他js文件並使用。但modelsname是必須的動態名稱。

什麼是正確的方法?

回答

0

有一個類似的問題試圖重複使用Schema s與不同的名稱,並通過提供集合名稱Schema創建以及只是設法得到它的工作。

您可以通過將collection param添加到您的架構創建選項來完成類似的操作。

但你需要爲每個model不同Schema對象,所以我建議創建一個函數來檢索模型的基礎上,集合名稱,如

var buildModel = function(collectionName) { 

    var schema = mongoose.Schema({ data: String }, { timestamps: true, collection: collectionName }); 

    return mongoose.model(collectionName, schema); 
} 

var model = buildModel(result.siteId); 

var data = new model({ 
    ...