此程序的目标是向反映用户输入的问题对象添加一个名为'userResponse'的属性。问题对象蒙戈DB是对象的数组,被称为“问题”举行,也就是在所谓的“会话”对象举行:通过params更新Mongo数据库条目
{
"_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
} ]
}
这里是我一直在使用端点的逻辑:
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]);
});
})
})
我看着其他一些例子(onetwo),但它们似乎初步认识并不因为这是一个补丁作为识别由PARAMS阵列的单个元件。
这种方法适用,因为它成功地更新与对象的新属性数据库,但在执行过程中服务器日志此错误:
(node:10955) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property '0' of undefined
我的理解是,这意味着该对象不能在某些时候可以在数据库中找到,但由于数据库确实包含了新的属性,因此必须稍后解决。这是否正确?
此外,它似乎脆有没有catch语句两个链式承诺......
任何人都可以提供关于如何改进这个过程的建议?这个逻辑不会成功更新数据库,但有错误。有没有更好的办法?
谢谢你的时间。
非常好!非常感谢您的时间,我对Mongo/Mongoose是新手,这是一个很大的帮助。 – Cameron
欢迎您:) ...很高兴它帮助...如果这回答你的问号,它被接受... –