好吧所以我在更新模型时遇到了问题。我可以创建一个文档,它工作得很好但是当我尝试更新时,我收到一个错误。
/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 :(得分:0)
是的,我认为快递bodyParser
可能没有按照您期望的方式解释a[features.kids]
。您可以使用req.body.a['features.kids']
访问该字段,因为它不会解释该嵌入时段。尝试命名您的<input>
a[features][kids]
,看看它是否会分析到您期望的对象结构中。