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,
},
})