Модель создана, но не может быть обновлена ​​с помощью Express, Mongoose и NodeJS - PullRequest
0 голосов
/ 07 августа 2011

Хорошо, поэтому у меня проблема с обновлением модели. Я могу создать документ, и он прекрасно работает, но когда я пытаюсь обновить, я получаю сообщение об ошибке.

/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 голосов
/ 07 августа 2011

Да, я думаю, что экспресс bodyParser, вероятно, не интерпретирует a[features.kids] так, как вы ожидаете. Вы можете получить доступ к полю с помощью req.body.a['features.kids'], поскольку он не интерпретирует этот встроенный период. Попробуйте назвать <input> a[features][kids] и посмотрите, соответствует ли это структуре объекта, которую вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...