2016-11-13 46 views
0

我得到下面的错误,使用快递在Node.js中执行应用程序。 我使用的猫鼬为我的数据库操作下面我详细说明了我的设计TypeError:无法读取未定义Mongoose的属性'推'

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"); 
}); 

当我将歌曲添加到歌曲时,我可以单独创建派对和歌曲的收藏对象我得到以下错误:

TypeError: Cannot read property 'push' of undefined 

任何人都可以请让我知道我在这里失踪.. !!

在此先感谢。

回答

0

查找返回一个在数组中转换的游标。如果您希望获得单个文档,请致电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时,问题仍然存在。 –

相关问题