私はまだ 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],
});
ドラフト スキーマは Angular サービスとして設定され、コントローラーに挿入されます。サービスは $resource を作成するためのボイラープレート コードですが、必須ではありません。
Draft オブジェクトを作成して Mongo に保存するためのコントローラーが 2 つあります。1 つは Angular を使用し、もう 1 つは 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 コントローラーで、ドラフトに保存するタイトルとコンテンツを渡します。私が理解しているように、ユーザー情報をサーバーに渡すために 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);
}
});
};
上記のコメントで、私の問題がどこにあるかがわかります。ここで作成されている Versions 配列項目に User プロパティを設定する正しい方法について、ドキュメント、SO の質問などを調べました。
User を Version Schema から Draft Schema に移動し、以下を使用することに注意してください。
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
}
]
}];