首页 > 解决方案 > 在全局钩子中识别 Sequelize 模型

问题描述

我希望通过全局挂钩为我的所有 Sequelize 操作添加一些低级日志记录。像这样的东西:

db.addHook('beforeUpdate', (instance, options) => { log.info({ instance, options }, `Updating ${modelName} ${instance.get('id')}`); });

我还没有弄清楚如何填充modelName甚至是否可能(尽管我发现缺乏信息表明这可能是不可能的)。任何机会这可能的,我只是还没有找到关键?

如记录所示,这是实例值:

instance: { "id": null, "nonIncarcerationAgreementIndicator": true, "insuranceApplicationId": 22, "updatedAt": "2018-06-13T13:55:10.978Z", "createdAt": "2018-06-13T13:55:10.978Z" }

options太长了,无法列出,但他们没有提到型号名称。

标签: sequelize.js

解决方案


你用的是哪个版本的sequelize?对于 v4,这有效

const Sequelize = require('sequelize');
const sequelize = new Sequelize('test_db', 'postgres', 'postgres', {
  host: '127.0.0.1',
  dialect: 'postgres',
  define: {
    hooks: {
      beforeCreate: (model, options) => {
        console.log(model.constructor.name);
      }
    }
  }
});
const User = sequelize.define('user', {
  username: Sequelize.STRING,
});

User.create({
  username: 'UserOne',
  projects: {
    projectName: 'projectOne'
  }
}).then((user) => {
  console.log(user);
})

推荐阅读