2011-08-07 11 views
0

モデルの更新に問題があります。私はドキュメントを作成することができますし、うまく動作しますが、私が更新しようとするとエラーが発生します。モデルが作成されましたが、Express、Mongoose、およびNodeJSで更新できません

/Users/User/Sites/project/app.js:182 
     a.features.kids = req.body.a.features.kids; 
             ^
TypeError: Cannot read property 'kids' of undefined 

モデルは次のようになります。

Affiliate = new Schema({ 
    'name': String, 
    'address': String, 
    'features': { 
     'kids': { type: Boolean, default: false }, 
    } 
}); 

私のフォームフィールドは次のようになります。これらは、更新のために追加された追加フィールドを使用して、作成と更新の両方に使用されます。

<input type="text" name="a[name]" id="a[name]" /> 
<input type="text" name="a[address]" id="a[address]" /> 
<input <% if (a.features.kids) { %>checked <% }; %>type="checkbox" name="a[features.kids]" id="a[features.kids]" /> 

新しいアイテムを作成するためのコード。これは正常に動作し、すべての情報が適切に追加されます。アイテムを更新するための

var a = new Affiliate(req.body.a); 

a.save(function() { 
    res.redirect('/admin'); 
}); 

ブロークン・コード:

Affiliate.findOne({ _id: req.params.id}, function(err, a) { 
    if (!a) return next(new NotFound('Affiliate not found')); 
    a.name = req.body.a.name; 
    a.address = req.body.a.address; 
    a.features.open_gym = req.body.a.features.kids; 

    a.save(function(err) { 
     res.redirect('/admin'); 
    }); 

}); 
+0

console.log req.body.aの場合はどうなりますか? 'a.name'と 'a.address'は変数の名前ですか? –

+0

ログreq.body.aは私に を与える '{: {ID: '4e1f803999decab541000003'、 名: 'ここでは名前'、 アドレス: '1234ストリート'、 'features.kids': 'で'}} ' 子フォームフィールドに名前を付けたときに何か問題がありますか? – Smosh

+0

フィールドIDにドットを使用しないことをお勧めします。たとえば、features_kidsを実行すると、以下に述べるPeter Lyonsのように正常に動作します。あなたは非常に少しの利益のために回避策の多くをやり終える。 –

答えて

0

ええ、私は特急bodyParserは、おそらくあなたが期待a[features.kids]方法を解釈されていないと思います。埋め込み期間を解釈していないので、req.body.a['features.kids']でフィールドにアクセスできます。 <input>a[features][kids]という名前を付けて、それが期待しているオブジェクト構造を解析するかどうかを確認してください。

+0

ありがとうピーター!それは完全に動作します。 – Smosh

関連する問題