前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sequelize默认开启individualHooks属性

Sequelize默认开启individualHooks属性

作者头像
用户6256742
发布2022-09-28 14:42:08
6390
发布2022-09-28 14:42:08
举报
文章被收录于专栏:网络日志

在使用Sequelize进行开发中我们通常使用Hooks做一些数据表修改后的操作,但是很多时候一个接口会对多个数据表进行处理使得Hooks只会触发afterBulkDestroy之类的批量Hooks而afterDestroy不会响应。

文档中的解决方法是在对数据进行增删改时添加 individualHooks:true属性,但是很多时候我们使用到大量的事务,每次需要对很多个表进行很多次操作。所以我们需要对这个属性进行批量设置。

解决方法:
代码语言:javascript
复制
const hooks = {
  beforeBulkDestroy(options: DestroyOptions<TypeAttributes | TagAttributes>) {
    options.individualHooks = true;
    return options;
  },
  afterDestroy(options: DestroyOptions<TypeAttributes | TagAttributes>) {
    console.log("有单个删除");
  },
};
export default hooks;

在对在指定的Hooks前执行的Hooks中我们就设置option.individualHooks=true,并且对option进行返回,在后面的函数执行时读取这个属性就等于true了。

完整代码:

1.编写初始化Hooks代码,使用Hooks监听数据表变化:

代码语言:javascript
复制
function init<T = any, J = any>(callback: (modal: J, type: "create" | "update" | "delete") => any) {
  return {
    beforeBulkCreate(options: any) {
      options.individualHooks = true;
      return options;
    },
    afterCreate(instance: T, options: any) {
      if (options.transaction) {
        options.transaction?.afterCommit(() => {
          callback((instance as any).dataValues as unknown as J, "create");
        });
      } else {
        callback((instance as any).dataValues as unknown as J, "create");
      }
    },
    beforeBulkUpdate(options: any) {
      options.individualHooks = true;
      return options;
    },
    afterUpdate(instance: T, options: any) {
      if (options.transaction) {
        options.transaction?.afterCommit(() => {
          callback((instance as any).dataValues as unknown as J, "update");
        });
      } else {
        callback((instance as any).dataValues as unknown as J, "update");
      }
    },
    beforeBulkDestroy(options: any) {
      options.individualHooks = true;
      return options;
    },
    afterDestroy(instance: T, options: any) {
      if (options.transaction) {
        options.transaction?.afterCommit(() => {
          callback((instance as any).dataValues as unknown as J, "delete");
        });
      } else {
        callback((instance as any).dataValues as unknown as J, "delete");
      }
    },
  } as any;
}
export default init;

2.编写数据表变化会回调函数:

代码语言:javascript
复制
import type { Article, ArticleAttributes } from "../models/init-models";
import init from "./utils/init";

export default init<Article, ArticleAttributes>((model, type) => {
  console.log(type, model);
});

3.在Model中赋值到hooks属性就可以了对应文档

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决方法:
  • 完整代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档