1

是否会partialupdate()导致数据类的 onUpdate 处理程序中的代码运行?

我在数据类中有这个设置:

exports.onUpdate = function(db, obj) {
  DB.log.info(obj.ShiftID);
  db.Shifts.load(obj.ShiftID)
  .then((Shift) => {
    DB.log.info(Shift);
    if (Shift.User == db.User.me) {
      Shift.User = null;
      Shift.status = 0;
      return Shift.update();
    }
  })
};

(是的,节点的角色 2 有权查询和更新 Shifts 数据类)

但是当我进行部分更新()时,我得到的日志为零。我需要做一个真正的更新查询...加载对象,修改数据,更新()?

此外,这段代码似乎导致 partialupdate() 根本不运行,但是当我删除处理程序时,它又开始工作了。

4

2 回答 2

1

是的,这目前是一个未实现的功能,因为部分更新无法执行 onUpdate 处理程序,因为没有可以传递给更新处理程序的对象。

另一方面,不能直接执行部分更新,因为这会导致安全问题(因为您的 onUpdate 处理程序可以包含验证代码等)

因此,我们目前拒绝对具有 onUpdate 处理程序的类进行任何部分更新,因为没有一种方法可以实际验证您的 onUpdate 代码的部分更新。

我们计划您可以定义一个额外的 onPartial 处理程序,您可以在执行 partialUpdate 之前采取一些额外的步骤。但是该处理程序只会获得部分更新,而不是对象本身。

于 2017-12-27T10:31:56.937 回答
0

我很确定 partialupdate() 不会导致 onUpdate 处理程序运行。

当我输入日志行并使用网站数据管理器编辑记录时,它确实按预期记录。没什么大不了的,我可以将查询重写为完整更新。

但是那里有任何代码确实会破坏 partialupdate() 这不好。

这是我正在使用的代码,只要 onUpdateHandler 中没有任何内容,它就可以工作:

  requestShift(shiftID) {
    db.ready().then((db) => {
      db.Applicants.find()
      .where({
         "shiftID": { "$in": [shiftID] },
      })
      .singleResult((applicants) => {
        return applicants.partialUpdate()
        .add("applicants", db.User.me.id)
        .add("photos", this.props.UserData.photo)
        .execute()
      })
      Alert.alert(
        'Confirmation',
        'Shift has been requested.',
      )
      this.props.navigation.dispatch(goToFindShifts)
    })
  }
于 2017-12-27T05:01:49.050 回答