我正在使用 js-data v3.0,update
如果在保存时更改了记录,我正在尝试防止存储注入从我的 API 收到的记录。
在 js-data v2.9 中,可以通过调用带有错误作为参数的回调来中止生命周期(文档)
现在在 v3.0 中,我正在使用 mapper#afterUpdate() 生命周期挂钩(docs),但我不知道如何中止生命周期。
显然返回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,
},
})