2016-06-12 3 views
0
apiRoutes.put('/intake/:id', function(req, res) { 
    var id = req.params.id; 
    Intake.findById({id, function(err, intake) { 
     if (err)res.send(err); 

     intake.check = true; 
     intake.save(function(err) { 
     if (err) {return res.json({success: false, msg: 'Error'});} 
     res.json({success: true, msg: 'Successful update check state.'}); 
    }); 
    }}) 
}); 

Что случилось? В консоли я вижу идентификатор, это нормально, но база данных не имеют каких-либо измененийmongoose не обновляет модель по ID

+0

Является ли 'check' действительным свойством в вашей схеме? Кроме того, вы хотите рассмотреть возможность использования ['findByIdAndUpdate'] (http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate), чтобы вы могли выполнить поиск и обновление с помощью одной команды. – robertklep

+0

Я добавляю требуемое поле: true в схеме, но все еще не работает –

+0

Можете ли вы добавить свою схему на свой вопрос? – robertklep

ответ

1
Intake.findById(/*remove { here*/id, function(err, intake) { 
     if (err)res.send(err); 

     intake.check = true; 
     intake.save(function(err) { 
     if (err) {return res.json({success: false, msg: 'Error'});} 
     res.json({success: true, msg: 'Successful update check state.'}); 
    }); 
    }) 
0

вы можете использовать этот

Intake.update({_id: req.params.id}, 
       { 
        check : true 
       }, 

       function(err){ 
        if(err){ 
        console.log(err); 
        res.status(400).send(err.errors); 
       }else{ 
        res.status(200).end(); 
       } 
     }); 
1

Вы дали нам слишком мало информации, чтобы помочь вам. Но у меня есть некоторые намеки на то, как узнать, что происходит не так: (я добавил пример кода в конце моего ответа.)

Используйте правильное форматирование своего кода. Ошибок легче найти.

Пожалуйста, избегайте res.send(err). Большинство экспресс-приложений предоставляют ошибку для перевода страницы HTML в конце маршрутного канала. Это работает, только если вы звоните res.next(err);. Если ваше приложение не создает страницу с ошибкой в ​​конце канала, вы можете использовать res.status(400).json({success: false, msg: err.message});.

После использования res.send или res.next или res.json вы должны завершить выполнение функции по return перед одной из этих функций можно назвать второй раз. Это может быть очень сложно в случае вложенных или асинхронных вызовов метода. Но в вашем примере это довольно просто.

Используйте несколько выходных логов, чтобы узнать, какую часть кода вы доберете, а какие нет.

console.dir(<object>); распечатывает структуру этого объекта.

Надеюсь, это немного поможет. ;-)

apiRoutes.put('/intake/:id', function(req, res) 
{ 
    var id = req.params.id; 
    Intake.findById(id, function(err, intake) 
    { 
    if (err) 
    { 
     res.next(err); 
     console.error(err); 
     return; 
    } 

    console.log("Modify check attribute"); 
    intake.check = true; 
    console.dir(intake); 
    intake.save(function(err) 
    { 
     console.log("Intake save called!"); 

     if (err) 
     { 
     console.error(err); 
     res.json({ 
      success: false, 
      msg: 'Error' 
     }); 
     return; 
     } 

     console.log("Success"); 
     res.json({ 
     success: true, 
     msg: 'Successful update check state.' 
     }); 
    }); 
    }}) 
});