JS-Data v3.0 останавливает выполнение в хуке жизненного цикла

Я использую js-data v3.0 и пытаюсь предотвратить внедрение в хранилище записи, полученной от моего API при update если запись была изменена при сохранении.

В js-data v2.9 можно прервать жизненный цикл, вызвав функцию обратного вызова с ошибкой в ​​качестве аргумента ( docs).

Сейчас в v3.0 я использую ловушку жизненного цикла mapper#afterUpdate() ( docs), но я не знаю, как прервать жизненный цикл.

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,
  },
})
Другие вопросы по тегам