保存多重模型猫鼬

时间:2019-09-18 07:55:47

标签: node.js mongodb express mongoose

让我们开始吧,我有2个模型

-Users
-Forms

我输入的路由类型为POST /form-event,我想发送这些字段

first_name,
last_name,
form: {}

first_namelast_name属于Users Model,而form属于Forms Model

好的,所以我的问题是尝试将人体数据保存到这两个模型中,

// Create a User
  const user = new User({
    ...req.body,
    _id: new mongoose.Types.ObjectId()
  });

  // Create a Form Event
  const formEvent = new FormEvent({
    ...req.body.form,
    userId: user._id
  });

  // Save User in the database
  user
    .save()
    .then(data => {
      formEvent
        .save()
        .then(event => res.send(event))
        .catch(err => {
          res.status(500).send({
            message: err.message
          });
        });
    })
    .catch(err => {
      res.status(500).send({
        message: err.message
      });
    });

是否有更好的方法来执行这种操作?因为我觉得这不是正确的方法,因为在发送POST时,用户被保存然后形成,但是如果发生这种情况会发生什么呢? formEvent中的错误,该用户已被保存,然后由于该用户已存在,我无法再次发送POST

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用Node.js异步等待来完成

您需要在功能之前添加 async 关键字,并在需要等待时使用 await 。另外,请使用try catch以获得更好的错误处理

// Add async keyword before function
async function () {
  // Create a User
  const user = new User({
    ...req.body,
    _id: new mongoose.Types.ObjectId()
  });
  // Create a Form Event
  const formEvent = new FormEvent({
    ...req.body.form,
    userId: user._id
  });
  try {
    var saveUser = await user.save()
    var saveFormevenr = await formEvent.save()
    return { saveUser, saveFormevenr };
  } catch (err) {
    return 'error occured';
  }
}

参考:https://www.geeksforgeeks.org/using-async-await-in-node-js/