【问题标题】:Saving a value into an array of objects in Express/Angular/Node将值保存到 Express/Angular/Node 中的对象数组中
【发布时间】:2013-11-03 04:36:55
【问题描述】:

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

【问题讨论】:

  • 我不熟悉 MEAN,但我仍然不清楚您要在 Mongo 上完成什么。您能否添加一个 JSON 示例,说明您希望在 Mongo 上的流程结束时获得什么?
  • req.user 中有什么内容? draft.versions 不包含Version 的数组,其属性为user(然后它只是一个ObjectId)?
  • @WiredPrairie req.user 包含我的用户对象,其中包含名称、用户名、ID 等。我的问题是我找不到正确的语法来将我的用户推送到正在执行的数组项上由 Express 控制器创建。
  • @ErickRuizdeChavez 我用我希望 JSON 对象的样子更新了我的答案。
  • 你实际上并没有使用 Mongoose User 对象吗?您需要创建一个 User 对象 [new User(req.user)]

标签: node.js mongodb angularjs express mongoose


【解决方案1】:
draft.versions = [req.user]

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

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

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

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

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

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

    var version = draft.versions[0]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2021-04-24
    • 1970-01-01
    • 2014-01-15
    相关资源
    最近更新 更多