2013-10-24 55 views
0

我仍然掌握Express/Angular以及它們如何一起發佈到服務器。我在示例應用程序中使用了MEAN堆棧。將值保存到Express/Angular/Node中的對象數組中

我試圖發佈的對象的架構在Express中看起來像這樣。

首先定義「版本」架構:

var VersionSchema = new Schema({ 
title: { 
    type: String, 
    default: '', 
    trim: true 
}, 
content: { 
    type: String, 
    default: '', 
    trim: true 
}, 
submitted: { 
    type: Date, 
    default: Date.now 
}, 
user: { 
    type: Schema.ObjectId, 
    ref: 'User' 
} 
}); 

版本模式在我的草稿架構使用。當用戶創建草稿時,它將成爲版本數組中的版本項目。草稿更新後,它會創建一個新的數組項目,以保存草稿的所有版本。

var DraftSchema = new Schema({ 
    versions: [VersionSchema], 
}); 

草案架構被設置爲一個Angular服務並注入到我的控制器中。該服務是用於創建$資源的樣板代碼,但不應該是必需的。

我有兩個控制器來創建Draft對象並保存到Mongo:一個是Angular,一個是Express。

角控制器:

$scope.create = function() { 
    var version = { 
     title: this.title, 
     content: this.content 
    }; 

    var draft = new Drafts({ 
     versions: [version] 
    }); 

    draft.$save(function(response) { 
     $location.path("drafts/" + response._id); 
    }); 
}; 

在角控制器我傳遞的標題和內容被保存到草案。據我瞭解,你不應該使用Angular控制器將用戶信息傳遞給服務器。所以這在下面的控制器中由Express處理。

快遞控制器:

exports.create = function(req, res) { 
var draft = new Draft(req.body); 
draft.versions = [req.user]; // Here is where my problem is, trying to save user 

draft.save(function(err) { 
    if (err) { 
     return res.send('users/signup', { 
      errors: err.errors, 
      draft: draft 
     }); 
    } else { 
     res.jsonp(draft); 
    } 
}); 
}; 

您可以在上面哪裏我的問題是我的評論看。我查看了文檔,SO問題等等,以便將我的User屬性設置爲在此處創建的Versions數組項目的正確方法。

需要注意的是,如果我移動用戶從版本架構的架構草案和使用:

draft.user = req.user; 

要保存用戶,然後它工作得很好。但我希望將用戶保存到VersionSchema中。

爲了解決Erick的下面的評論,這是我希望我的草稿模型看起來像JSON表示。版本是一個數組,因爲我希望每次草稿更新時都創建一個新的數組項目。

[{ 
    _id: 4h55542j232555000441, 
    versions: [ 
     { 
      title: 「A really great title」, 
      body: 「On that day the people….」, 
      user: 5234523452349589hh23523, 
      submitted: Date 
     } 
    ] 
}]; 
+0

我不熟悉的意思,但它仍然不是很清楚,我,你要完成你的蒙戈什麼。你可以添加一個JSON例子來說明Mongo過程結束時你期望得到什麼嗎? –

+0

'req.user'中有什麼? 'draft.versions'不包含'Version'數組,它具有'user'屬性(然後它只是一個'ObjectId')? – WiredPrairie

+0

@WiredPrairie req.user包含我的用戶對象,其中包含名稱,用戶名,ID等。我的問題是,我找不到正確的語法將我的用戶推送到由Express控制器創建的數組項目上。 – keepitreal

回答

0
draft.versions = [req.user] 

執行以下操作:替換包含與包含用戶對象的新陣列的版本對象的版本陣列。這不是你想要的。

正如我所見,草案。版本有以下內容:

[ 
    { 
    title: '...', 
    content: '...' 
    } 
] 

要添加你需要做以下步驟的用戶ID:

  1. 得到的版本陣列版本對象

  2. 分配一個新的屬性給版本對象並賦予其值user._id

    var version = draft.versions [0]

    版本[「用戶」] = req.user._id