模型已创建,但无法使用Express,Mongoose和NodeJS进行更新

时间:2011-08-07 00:27:55

标签: node.js express mongoose

好吧所以我在更新模型时遇到了问题。我可以创建一个文档,它工作得很好但是当我尝试更新时,我收到一个错误。

/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');
    });

});

1 个答案:

答案 0 :(得分:0)

是的,我认为快递bodyParser可能没有按照您期望的方式解释a[features.kids]。您可以使用req.body.a['features.kids']访问该字段,因为它不会解释该嵌入时段。尝试命名您的<input> a[features][kids],看看它是否会分析到您期望的对象结构中。