2016-06-12 15 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.'}); 
    }); 
    }}) 
}); 

Was ist das Problem? In Konsole i ID sehen, dann ist es in Ordnung, aber Datenbank haben keine ÄnderungMungo aktualisiert Modell nicht nach ID

+0

Ist "check" eine gültige Eigenschaft in Ihrem Schema? Außerdem sollten Sie in Erwägung ziehen, ['findByIdAndUpdate'] (http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate) zu verwenden, damit Sie die Suche und die Aktualisierung mit einem einzigen Befehl ausführen können. – robertklep

+0

Ich füge das erforderliche Feld hinzu: true im Schema funktioniert aber immer noch nicht –

+0

Können Sie Ihr Schema zu Ihrer Frage hinzufügen? – robertklep

Antwort

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

Sie diese

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

Sie haben uns zu wenig Informationen, die Sie verwenden können, um zu helfen. Aber ich habe ein paar Tipps, wie ich herausfinden kann, was schief läuft: (Ich habe Beispielcode am Ende meiner Antwort hinzugefügt.)

Verwenden Sie eine ordnungsgemäße Formatierung Ihres Codes. Fehler sind leichter zu finden.

Bitte vermeiden Sie res.send(err). Die meisten Express-Apps bieten einen Fehler bei der HTML-Seitenübersetzung am Ende der Routenleitung. Dies funktioniert nur, wenn Sie anrufen. Wenn Ihre App am Ende der Pipe keine Fehlerseite generiert, können Sie res.status(400).json({success: false, msg: err.message}); verwenden.

Nach dem Einsatz von res.send oder res.next oder res.json Sie die Ausführung der Funktion durch return vor einem dieser Funktionen ein zweites Mal werden kann bis zum Ende haben genannt. Dies kann bei verschachtelten oder asynchronen Methodenaufrufen sehr kompliziert sein. Aber in Ihrem Beispiel ist es ziemlich einfach.

Verwenden Sie einige Log-Ausgaben, um zu sehen, welcher Teil des Codes Sie erreichen und welcher nicht.

console.dir(<object>); druckt die Struktur dieses Objekts aus.

Hoffe das hilft ein wenig. ;-)

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