我正在使用js-data v3.0,并且如果保存时记录发生更改,我试图阻止从update
上从我的API接收到的记录的存储注入。
在js-data v2.9中,可以通过调用带有错误作为参数(docs)的回调来中止生命周期
现在在v3.0中,我正在使用mapper#afterUpdate()生命周期挂钩(docs),但我不知道如何中止生命周期。
答案 0 :(得分: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,
},
})