Le but de ce programme est d'ajouter une propriété appelée 'userResponse' aux objets de problème qui reflètent l'entrée de l'utilisateur. L'objet problème dans Mongo DB est maintenu dans un tableau d'objets, appelés « problèmes », qui se tient dans un objet appelé « session »:Mise à jour des entrées de la base de données Mongo par les paramètres
{
"_id" : ObjectId("59df5ee7adb378237377dbb4"),
"updatedAt" : ISODate("2017-10-12T12:24:07.269Z"),
"createdAt" : ISODate("2017-10-12T12:24:07.269Z"),
"userId" : "59df5edbadb378237377dbb3",
"problems" : [
{
"correctResponse" : 23,
"problem" : "20 + 3",
"secondTerm" : 3,
"firstTerm" : 20
} ]
}
Voici la logique du point de terminaison que j'ai utilisé:
router.patch('/session/:sessionId/:index', passport.authenticate('jwt', { session: false }), (req, res) => {
Session.findOne({_id: req.params.sessionId})
.then((item)=>{
item.problems[req.params.index].userResponse = req.body.userResponse;
Session.update({_id: req.params.sessionId}, item).then((updated)=>{
res.json(updated.problems[req.params.index]);
});
})
})
J'ai regardé quelques autres exemples (onetwo), mais ils ne semblent pas relavant puisque c'est un patch pour des éléments individuels du tableau identifiés par les params.
Cette approche fonctionne, en ce qu'elle met à jour avec succès la base de données avec les nouvelles propriétés sur les objets, mais lors de l'exécution des journaux de serveur cette erreur:
(node:10955) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property '0' of undefined
je crois comprendre que cela signifie que l'objet ne peut pas être trouvé dans la base de données à un moment donné, mais comme la base de données inclut les nouvelles propriétés, elle doit être résolue plus tard. Est-ce corrrect?
De plus, il semble fragile d'avoir deux promesses enchaînées sans déclarations de capture ...
Quelqu'un peut-il offrir des suggestions sur la façon d'améliorer ce processus? Cette logique met à jour avec succès la base de données, avec des erreurs. Y a-t-il un meilleur moyen?
Nous vous remercions de votre temps.
Excellent! Merci beaucoup pour votre temps, je suis nouveau à Mongo/Mongoose et c'est une grande aide. – Cameron
Vous êtes les bienvenus :) ... heureux que cela ait aidé ... s'il vous plaît si cela répond à votre question, notez-le comme accepté ... –