gpt4 book ai didi

javascript - Sequelize.js afterUpdate 钩子(Hook)传递更改的值

转载 作者:搜寻专家 更新时间:2023-11-01 00:08:34 24 4
gpt4 key购买 nike

我正在构建一个 node.js 应用程序,并且正在评估 Sequelize.js 的持久对象。我需要做的一件事是在修改对象时发布新值。最明智的做法似乎是使用 afterUpdate Hook 。

它几乎可以完美运行,但是当我保存一个对象时,钩子(Hook)会传递已保存对象的所有值。通常这是可取的,但为了减少发布/订阅的讨论,我宁愿不重新发布未保存的字段。

例如,运行以下命令

tasks[0].updateAttributes({assignee: 10}, ['assignee']);

会自动在适当的 channel 上发布该任务的受让人的新值,但不会重新发布任何其他字段,这些字段没有改变。

我最接近的是使用 afterUpdate Hook :

Task.hook('afterUpdate', function(task, fn) {
Object.keys(task).forEach(function publishValue(key) {
pubSub.publish('Task:'+task.id+'#'+key, task[key]);
});
return fn();
});

这很简单,但是由于“任务”对象具有所有字段,所以我不必要地吵闹。 (pubSub 系统不知道以前的值,我想保持这种状态。)

我可以覆盖任务对象(以及我所有其他对象)中的 setter ,但我宁愿在保存对象之前不发布。要保存的对象似乎没有旧值(我可以找到),所以我不能以此为基础进行发布。

到目前为止,从设计的 Angular 来看,我得出的最佳答案是调整一行 dao.js 以将保存的值添加到返回的对象中,并在 Hook 中使用它:

self.__factory.runHooks('after' + hook, _.extend({}, result.values, {savedVals: args[2]} ), function(err, newValues) {


Task.hook('afterUpdate', function(task, fn) {
Object.keys(task.savedVals).forEach(function publishValue(key) {
pubSub.publish('Task:'+task.id+'#'+key, task[key]);
});
return fn();
});

从维护的 Angular 来看,显然更改 Sequelize 库并不理想。

所以我的问题是双重的:是否有更好的方法可以在不修改 dao.js 的情况下将所需信息获取到我的 hook,或者是否有更好的方法来攻击我的基本需求?

提前致谢!

最佳答案

目前没有。在完全按照您的描述实现时,我们只需实现逻辑来比较旧值和新值,如果它们不同,则假设它们已经改变。

关于javascript - Sequelize.js afterUpdate 钩子(Hook)传递更改的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20083009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com