我仍然掌握Express / Angular以及它们如何协同工作以发布到服务器。我在我的示例应用程序中使用MEAN堆栈。
我试图发布的对象的Schema在Express中看起来像这样。
首先定义'Version'架构:
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'
}
});
版本架构用于草案架构。当用户创建草稿时,它将成为versions数组中的Version项。草稿更新后,它会创建一个新的数组项,以便保存草稿的所有版本。
var DraftSchema = new Schema({
versions: [VersionSchema],
});
Draft Schema设置为Angular Service并注入我的控制器。该服务是用于创建$资源的样板代码,尽管不是必需的。
我有两个控制器来创建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在下面的控制器中处理。
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);
}
});
};
您可以在上面的评论中看到我的问题所在。我查看了docs,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 :(得分:0)
draft.versions = [req.user]
执行以下操作:将包含版本对象的versions数组替换为包含用户对象的新数组。这不是你想要的。
我认为,draft.versions有以下内容:
[
{
title: '...',
content: '...'
}
]
要添加用户ID,您需要执行以下步骤:
从版本数组中获取版本对象
为版本对象分配一个新属性,并为其赋值user._id
var version = draft.versions [0]
version ['user'] = req.user._id