我仍然了解 Express/Angular 以及它们如何协同工作以发布到服务器。我在我的示例应用程序中使用MEAN堆栈。
我要发布的对象的架构在 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],
});
Draft Schema 设置为 Angular 服务并注入到我的控制器中。该服务是用于创建 $resource 的样板代码,但不是必需的。
我有两个控制器来创建 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 在下面的评论,这是我希望我的 Draft 模型看起来像的 JSON 表示。Versions 是一个数组,因为我希望每次草稿更新时都创建一个新的数组项。
[{
_id: 4h55542j232555000441,
versions: [
{
title: “A really great title”,
body: “On that day the people….”,
user: 5234523452349589hh23523,
submitted: Date
}
]
}];