0

我仍然了解 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 
        }
    ]
}];
4

1 回答 1

0
draft.versions = [req.user]

执行以下操作:将包含版本对象的版本数组替换为包含用户对象的新数组。这不是你想要的。

在我看来,draft.versions 有以下内容:

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

要添加用户 ID,您需要执行以下步骤:

  1. 从版本数组中获取版本对象

  2. 为版本对象分配一个新属性,并为其赋值 user._id

    var version = draft.versions[0]

    版本['用户'] = req.user._id

于 2013-10-26T10:02:12.647 回答