【问题标题】:How to push object in empty array如何将对象推入空数组
【发布时间】:2017-05-01 18:07:13
【问题描述】:

我的代码如下所示:

  router.put('/stories/:story', function(req,res,next){
  Story.findById(req.story._id, function(err, story) {
        if (err) {
            res.send(err);
        }

        story.scenarios.push(req.body); 
        story.save(function(err,story) {
            if (err) {
                res.send(err);
            }
            res.json(story);
        })

    });
});

req.body 包含一个带有图像和音频的对象。 我希望能够用新对象更新这个数组。 如何将新对象推送到story.scenario(一开始为null)。

现在我得到一个错误:'cannot read property push of null'

谁知道解决办法?

【问题讨论】:

  • 只需将 story.scenarios 初始化为一个空数组,然后再调用它的 push() 方法。
  • story.scenarios = []; story.scenarios.push(req.body);
  • 你能展示你的故事架构吗?

标签: angularjs node.js express mongoose


【解决方案1】:

story.scenarios 一开始就是null,所以你需要将它初始化为[],但你不想一直这样做,因为story.scenarios 可能已经有数据了。

story.scenarios = story.scenarios || [];
story.scenarios.push(req.body); 

【讨论】:

    【解决方案2】:

    我假设参数中的 storyobject 并且它有 _id 存在。但是您的代码中仍然存在问题。

    您不能只使用req.story 来访问传递的对象。使用req.params 访问所有此类对象。

    将您的代码更改为此,它应该可以工作。

    Story.findById(req.params.story._id, function(err, story) {
    ...
    });
    

    另外,我假设,在您的Story Schema 中,您已将scenarios 声明为一个数组,并且req.body 与您在架构中定义的type 匹配。

    【讨论】:

      【解决方案3】:

      只需将 story.scenarios 初始化为一个空数组。 然后它调用 push() 函数。

      story.scenarios = []; story.scanarios.push(someData);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-25
        • 2019-03-24
        • 1970-01-01
        • 2020-03-23
        • 2017-12-05
        • 2020-02-08
        • 2023-03-14
        相关资源
        最近更新 更多