【发布时间】:2020-12-21 19:23:19
【问题描述】:
我想用 async/await 方法改进我在 mongose 中的旧回调代码(这些方法更易于阅读和组织)
PUT 是问题
我有一个 findById,它是正确的
问题是尝试使用 await user.save(userWithNewProps) 更新文档时
// put
app.put('/:id', async (req, res) => {
try {
const user = await User.findById(req.params.id).exec()
if (user === null) return res.status(404).json(null)
const userWithNewProps = {name: 'Homer', lastame: 'Simpson'}
const userUpdated = await user.save(userWithNewProps) // Doesn't works!
res.status(200).json(userUpdated)
} catch (e) {
return res.status(500).json(e)
}
})
我尝试学习许多教程和其他问题,但对我来说有些困难。 你能检查我的错误吗?
回调地狱
这是原始的回调代码,可以正常使用,但是是回调地狱和恶魔:
// put
app.put(
'/:id',
(req, res) => {
User.findById(req.params.id, (err, userFound) => {
if (err) {
return res.status(500).json(err);
}
if (!userFound) {
return res.status(404).json(err);
}
userFound.name = 'Homer';
userFound.lastname = 'Simpson';
userFound.save((err, userUpdated) => {
if (err) {
return res.status(500).json(err);
}
res.status(200).json(userUpdated);
});
});
});
非常感谢
【问题讨论】:
-
什么不起作用?保存还是更新?
-
查看 const userWithNewProps = {name: 'Homer': lastame: 'Simpson'} => const userWithNewProps = {name: 'Homer', lastame: 'Simpson' 中的 ',' 参数}
-
@BinaryMan 更新是问题
-
@BinaryMan ,抱歉,homer simpson 中的逗号 (',') 仅用于示例
-
好的,试试这个:user.name = 'Homer'; user.lastname = '辛普森'; user.markModified('name'); user.markModified('姓氏');等待用户.save();
标签: javascript asynchronous mongoose async-await callback