【问题标题】:Mongoose Node - Request Multiple updates to multi documents with success all or cancel all?Mongoose Node - 请求对多个文档进行多次更新并全部成功或全部取消?
【发布时间】:2019-05-22 17:01:33
【问题描述】:

很好的问题,我希望很快就会被淘汰。

有时我们希望在前端执行操作时更新许多文档。

示例反应代码

this.props.submitRecord(newRecord, (err, record) => {
  if (err) actions.showSnackBar(err);
  else {
    actions.showSnackBar("Record Submitted Successfully ...");
    this.props.validateClub(this.props.club._id, (err, message) => {
      if (err) actions.showSnackBar(err);
      else {
        obj.setState({
          player: {},
          open: false
        });
        actions.showSnackBar(message);
      }
    });
  }
});

如我们所见,我首先提交了第一个请求,成功后,我提交了第二个请求。如果第一个失败,第二个就不会发生。但是,如果第一个通过,而第二个由于某种原因而失败,则数据不匹配。

理想情况下,我们希望将它们一起发送,它们都通过或不通过。有没有一种简单的方法可以用 react、Node 和 mongoose 来做这件事,还是我必须用艰难的方式来做(这也可能会出错,存储旧值直到所有请求都得到满足,或者在节点服务器,哈哈)。

谢谢

【问题讨论】:

    标签: node.js reactjs mongoose


    【解决方案1】:

    事务是 Mongodb 4.0 的一部分。以前的版本中,MongoDB 中没有事务支持。另一种方式可能是通过代码对失败进行回滚,还有一些非主见的 npm 包,例如 mongoose-transaction。

    https://www.mongodb.com/transactions

    【讨论】:

    • 如果操作必须仅出于 UI 目的执行,则应使用 Promise.all,但是,如果来自 UI 的某些请求被发送到节点服务器,并且该请求是另一个应该以原子方式运行的请求的一部分,那么您可能必须在 node.js 服务器和反应前端之间实现两阶段提交。可能需要更多细节(例如 node.js 代码)来调查这个......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2017-09-01
    • 2015-02-19
    • 2017-12-08
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多