2017-03-13 7 views
2

サブ文書に値を追加している間、コマンドプロンプトで、のようなエラー
のようなエラーが表示されます。これをどうすれば解決できますか?解決法はnodejsアプリケーションで未定義のプロパティ 'プッシュ'を読み取ることができません?

var venueSchema = new Schema({ 
    name: { 
     type: String, 
     required: true, 
     unique:true 
    }, 
    address: { 
     type: String, 
     required: true 
    } 
}, { 
    timestamps: true 
}); 

// create a schema 
var batchSchema = new Schema({ 
    batchname: { 
     type: String, 
     required: true, 
     unique: true 
    }, 
    activityname: { 
     type: String, 
     required: true 
    }, 
    time: { 
    type:String, 
    required:true 
    }, 
    duration: { 
    type:String, 
    required:true 
    }, 
    classtype: { 
    type:String, 
    required:true 
    }, 
    trainer: { 
    type:String, 
    required:true 
    }, 
    price:{ 
    type:Currency, 
    required:true, 
    unique:true 
    }, 

    venue:[venueSchema] 
}, { 
    timestamps: true 
}); 

そして、私のRouting code

batchRouter.route('/:batchId/venue') 
.post(function (req, res, next) { 
    Batches.findById(req.params.batchId, function (err, batch) { 
     if (err) throw err; 
     batch.venue.push(req.body); 
     batch.save(function (err, batch) { 
      if (err) throw err; 
      console.log('Updated venue!'); 
      res.json(batch); 
     }); 
    }); 
}) 

は、ここで私は親スキーマ
に値を与えたが、私はこのサブ文書に値を与えることができないんだけど、これらの助けを借りてmy schema codeです

親文書はbatchSchemaであり、サブ文書はvenueSchemaです。
バッチの作成後にidが表示されます。このidの助けを借りて、私はそれは私にエラーを示し、その時点で会場へ値を追加しようとしていますあなたが得るエラーがあることを意味
batch.venue.push(req.body);

+0

'batch.venue = batch.venue || []; 'プッシュ前。 – Edgar

+0

あなたはbatch.venueで何を期待していますか?ちょうどそれを記録する – karthick

答えて

1

で:あなたが得ることはありません

  1. データベースからのエラーif (err) throw err;
  2. を発生しませんので、あなたがを得ることはありませんので、あなたがあなたのbatchCannot read property 'push' of undefined
  3. を定義されていますので、あなたのbatch.venueは定義されていません0

それはあなたがデータベースとの接続を持っていることを、あなたが欲しいIDと文書を得ることを意味、それはあなたが存在すると、配列であることを期待プロパティvenueを持っていません。

の代わりに:

あなたが使用することができます
batch.venue.push(req.body); 

if (!Array.isArray(batch.venue)) { 
    batch.venue = []; 
} 
batch.venue.push(req.body); 

か:

if (Array.isArray(batch.venue)) { 
    batch.venue.push(req.body); 
} else { 
    batch.venue = [req.body]; 
} 

またはそのような何か、あなたが前に、配列を持っているかどうかをチェックする必要がある、すなわち、あなたはそれに要素をプッシュしようとします。配列がない場合は、新しい配列を作成する必要があります。

関連する問題