【问题标题】:Improve callback code into async await mongoose将回调代码改进为异步等待猫鼬
【发布时间】: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


【解决方案1】:

从我们在 cmets 的讨论中了解到,问题出在更新而不是保存数据时,因此您需要通知 Mongoose 的更改跟踪。

可以使用 markModified() method 通知 Mongoose 更改,并且应该在保存之前。

user.name = 'Homer'; 
user.lastname = 'Simpson'; 
user.markModified('name'); 
user.markModified('lastname'); 
await user.save();

问候:)

【讨论】:

  • 如果没有这些,为什么回调样式的代码可以工作?
猜你喜欢
  • 2018-08-30
  • 2019-05-10
  • 2020-10-16
  • 2018-04-13
  • 2021-04-20
  • 2019-02-15
  • 2018-06-11
  • 2020-08-01
  • 2019-12-12
相关资源
最近更新 更多