2016-08-23 5 views
0

私はアルバムにトラックを作成しようとしているが、私は1つのエラーエラーがnullの「追跡」(Node.jsの)

で立ち往生していますが、これは私の経路コード

// Adding track to album 
router.get('/:album_id/track/new', function(req, res){ 
    Album.findById(req.params.album_id, function(err, falbum){ 
     if(err){ 
      console.log(err); 
     } else { 
      res.render('tracks/add', {albums: falbum}); 
     } 
    }); 
}); 

// Post routes 
router.post('/:album_id/track',upload.single('songs'), function(req, res){ 
    Album.findById(req.params.album_id, function(err, album){ 
     if(err){ 
      console.log(err); 
     } else { 
      if(req.file){ 
       console.log('Uploading Song ....'); 
       var songs = req.file.filename; 
      } else { 
       console.log('No Song Uploaded...'); 
      } 
      var songname = req.body.songname; 
      var songs = songs; 
      var newSong = {songname: songname, songs:songs}; 

      Track.create(newSong, function(err, track){ 
       if(err){ 
        console.log(err); 
       } else { 
        track.albumId.id = req.params.album_id; 
        track.save(); 
        album.tracks.push(track); 
        album.save(); 
        console.log('New Track is created'); 
        res.redirect('/albums/' + album._id); 
       } 
      }); 
     } 
    }); 
}); 

router.get('/:album_id',function(req, res){ 
    Album.findById(req.params.album_id).populate('tracks').exec(function(err, album){ 
     if(err){ 
      console.log(err); 
     } else { 
      res.render('albums/show', {albums: album}) 
     } 
    }); 
}); 



module.exports = router; 

そして、私はこの次のエラーを取得します

v4\node_modules\mongoose\node_modules\mongodb\lib\utils.js:98 
    process.nextTick(function() { throw err; }); 
           ^

TypeError: Cannot read property 'tracks' of null 
    at C:\Users\tjesu\Desktop\pidal\pidal-v4\routes\albums.js:53:11 
    at Function.<anonymous> (C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\mongoose\lib\model.js:3324:16) 
    at C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\mongoose\lib\model.js:1870:14 
    at C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\async\lib\async.js:726:13 
    at C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\async\lib\async.js:52:16 
    at done (C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\async\lib\async.js:246:17) 
    at C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\async\lib\async.js:44:16 
    at C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\async\lib\async.js:723:17 
    at C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\async\lib\async.js:167:37 
    at model.callbackWrapper (C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\mongoose\lib\model.js:1843:11) 
    at next_ (C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\hooks-fixed\hooks.js:89:34) 
    at fnWrapper (C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\hooks-fixed\hooks.js:186:8) 
    at C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\mongoose\lib\model.js:3324:16 
    at C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\mongoose\lib\model.js:228:5 
    at C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\mongoose\lib\model.js:135:7 
    at C:\Users\tjesu\Desktop\pidal\pidal-v4\node_modules\mongoose\node_modules\mongodb\lib\collection.js:504:5 

どうすればいいですか?このエラーはどうですか? トラックをトラックに変更しようとしましたが、まだエラーがあります ありがとう!

+1

多分私が間違っしかし、私はあなただと思いますクエリーAlbum.findById(req.params.album_id)は、populateがエラーをスローする理由を返しません。実際にデータを検索するクエリを確認しようとします。お役に立てれば。 –

+0

このエラーは、 'Album.findById()'クエリが 'album_id'と一致するドキュメントを見つけられなかったことを意味します。したがって、コールバックの結果変数' album'は定義されていないため、album.tracksにエラーがスローされます。プッシュ(トラック); '。結果が文書であるかどうか最初に確認する必要があります。 – chridam

+0

あなたのスキーマを表示できますか? 'C:\ Users \ tjesu \ Desktop \ pidal \ pidal-v4 \ routes \ albums.js:53:11'を参照している行を確認することもできます –

答えて

0

Album.findByIdalbumを返しますか確認できますか?

データベースクエリがドキュメントと一致しないため、albumが定義されていないため、ドキュメントのトラックプロパティにアクセスできません。

0

trackが正常に作成された後、の文書でpushing tracksに間違えていると思います。

あなたはtrack._idの代わりtrackをプッシュする必要があります。(私はあなたがこのようにあなたがあなたのschemaObjectIdreferenceを使用している必要があり、トラックをpupulateしようとしている見ることができるように)。

trackdocumentを押すと、albumが正常に保存されないことがあります。コールバックが添付されていないので(album.save())、それはあなたに実際のerrorを表示していません。このように何album文書が作成されず、それはあなたがalbum.findById

を使用しているときpopulate('tracks')を使用している間、それはあなたにこのエラーを示している理由ですnullを与えている:cannot read property tracks of null.

Track.create(newSong, function(err, track){ 
      if(err){ 
       console.log(err); 
      } else { 
       track.albumId.id = req.params.album_id; 
       track.save(); 
       album.tracks.push(track._id);//Here _id should be pushed. 
       album.save(); 
       console.log('New Track is created'); 
       res.redirect('/albums/' + album._id); 
      } 
     }); 
関連する問題