1

我正在使用 js-data v3.0,update如果在保存时更改了记录,我正在尝试防止存储注入从我的 API 收到的记录。

在 js-data v2.9 中,可以通过调用带有错误作为参数的回调来中止生命周期(文档

现在在 v3.0 中,我正在使用 mapper#afterUpdate() 生命周期挂钩(docs),但我不知道如何中止生命周期。

4

1 回答 1

1

显然返回null可以防止存储注入。

防止update回调覆盖在记录中所做的更改的完整代码save()

function beforeUpdate(id, props, opts) {
  const currentStoreItem = this.datastore.get(opts.name, id)
  opts.tlChangesBeforeUpdate = JSON.stringify(currentStoreItem.changes())
  return this.constructor.prototype.beforeUpdate.call(this, id, props, opts)
}

function afterUpdate(id, props, opts, result) {
  const currentStoreItem = this.datastore.get(opts.name, id)
  const currentChanges = JSON.stringify(currentStoreItem && currentStoreItem.changes())
  if (currentChanges != opts.tlChangesBeforeUpdate) return null // This prevents store injecton
  return this.constructor.prototype.afterUpdate.call(this, id, props, opts, result)
}

const ds = new DataStore({
  mapperDefaults: {
    beforeUpdate: beforeUpdate,
    afterUpdate: afterUpdate,
  },
})
于 2018-10-04T14:47:13.787 回答