2016-11-13 9 views
0

Expressを使ってNode.jsでアプリをやっている以下のエラーが表示されます。私は私のデザインTypeError:未定義のMongooseのプロパティ 'push'を読み取ることができません

Party.js

var mongoose = require("mongoose"); 

var partySchema = new mongoose.Schema({ 
    partyName: String, 
    songs: [ 
     { 
       type: mongoose.Schema.Types.ObjectId, 
       ref: "Song" 
     } 
    ] 
}); 

module.exports = mongoose.model("Party", partySchema); 

Song.js

var mongoose = require("mongoose"); 

var songsSchema = new mongoose.Schema({ 
    videoId: String, 
    videoName: String 
}); 

module.exports = mongoose.model("Song", songsSchema); 

マイApp.js

app.post("/search/addSong", function(req, res) { 
    Party.find({partyName:"hello"},function(err,party){ 
     if(err){ 
      console.log("Failed in find"); 
     } else { 
      console.log(party); 
      // console.log(typeof(req.body.videoId)); 
      var videoId = req.body.videoId; 

      var newSong = [ { 
       videoId:req.body.videoId, 
       videoName:req.body.videoName 
      } 
      ]; 
      Song.create(newSong, function(err, createdSong){ 
     if(err){ 
      console.log("Error creating a new party"); 
     } else { 
      console.log(createdSong); 
      party.songs.push(createdSong);// ERROR ON THIS LINE 
      party.save(); 
      res.redirect("/search"); 
     } 
    }); 
     } 
    }); 
    res.render("addSong"); 
}); 

を詳しく説明しているの下に、私は私のDB操作のためにマングースを使用しています パーティーとソングのコレクションオブジェクトを個別に作成することができます。ソングを追加すると電子パーティーキューは、私は次のエラーを取得する:

TypeError: Cannot read property 'push' of undefined 

誰も私が私がここで行方不明何を聞かせていただけます..!

ありがとうございます。

答えて

0

findは、配列で変換されたカーソルを返します。単一のドキュメントが必要な場合は、findOneを呼び出します。

app.post("/search/addSong", function(req, res) { 
    Party.findOne({partyName:"hello"},function(err,party){ 
     if(err){ 
      console.log("Failed in find"); 
     } else { 
      console.log(party); 
      // console.log(typeof(req.body.videoId)); 
      var videoId = req.body.videoId; 

      var newSong = [ { 
       videoId:req.body.videoId, 
       videoName:req.body.videoName 
      } 
      ]; 
      Song.create(newSong, function(err, createdSong){ 
     if(err){ 
      console.log("Error creating a new party"); 
     } else { 
      console.log(createdSong); 
      party.songs.push(createdSong);// ERROR ON THIS LINE 
      party.save(function(err){ 
      res.redirect("/search"); 
      }); 
     } 
    }); 
     } 
    }); 
    res.render("addSong"); 
}); 

はまた、それ以外の場合は、JavaScriptを非同期性を与え、保存せずにリダイレクトし、保存が完了したときにのみリダイレクトが呼び出されていることを確認しますが、保存のコールバックにリダイレクト置きます。

+0

問題は、オブジェクトを別のオブジェクトにプッシュしようとしている行です。 –

+1

答えに示唆されているようにfindOneを使用すると、まだ問題がありますか? –

関連する問題