2016-12-16 3 views
0

私のコードは次のようになります。空の配列にオブジェクトをプッシュする方法

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です)。

今、私はエラーを取得する:ソリューションを知っている

誰かを「ヌルのプロパティプッシュを読むことができませんか」?あなたは[]としてそれを初期化する必要がありますが、story.scenariosはすでにデータを持っているかもしれないので、あなたはそれをすべての時間を行うにはしたくないので、

+2

ちょうどそれにプッシュ()メソッドを呼び出す前に、空の配列にstory.scenariosを初期化します。 – IAmDranged

+2

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

+0

ストーリースキーマを表示できますか? –

答えて

4

story.scenariosは非常に冒頭にnullです。

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

ありがとう、働いた! –

2

私は、パラメータでstoryobjectであり、それは_idがそれを提示していると仮定しています。しかし、あなたのコードにはまだ問題があります。

req.storyを使用して、渡されたオブジェクトにアクセスすることはできません。そのようなすべてのオブジェクトには、req.paramsを使用してアクセスします。

コードをこれに変更すると正常に動作します。

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

また、私はあなたのStory Schemaあなたは配列としてscenariosを宣言し、req.body試合typeスキーマで定義されている中で、想定しています。

+0

既にこれまでにやったことがありますが、答えに感謝します! –

2

story.scenariosを空の配列に初期化するだけです。 次に、push()関数を呼び出します。

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

関連する問題