【问题标题】:track changes in table nodejs跟踪表 nodejs 中的更改
【发布时间】:2016-06-17 13:00:57
【问题描述】:

如何使用节点 js 跟踪表中的更改?对于连接,我使用 Sequelize。 任务是观察用户数据的变化,如果有变化则向前端发送事件。我使用套接字 io,并且不会使用超时。有没有办法跟踪像'table field xxx where user_id = yyy was changed'这样的事件并获得新的字段值。

【问题讨论】:

  • 它将在很大程度上取决于数据库以及您用于该数据库的 API。只有在数据库不允许的情况下,Node.js 才能做到这一点。
  • 续集,MySQL。也许还有其他 ORM 可以解决这个问题?
  • 数据是由node.js通过Sequelize还是其他程序/脚本添加/编辑的?
  • 数据被其他程序编辑
  • 然后你必须让其他程序通知 node.js 数据的变化,以及去哪里查看。您可以尝试输入hooks in Sequelize,但它似乎只能在 sequelize 内部工作,而不是查看数据库本身。

标签: javascript node.js database


【解决方案1】:

在 sequelize 中尝试钩子。 在您的 conf/connection.js 中,您可以定义全局挂钩。这样你就可以拦截一切了。

钩子定义:

const hooks = {
beforeBulkUpdate: (options) => {
    options.individualHooks = true;
    return;
},
beforeBulkDestroy: (options) => {
    options.individualHooks = true;
    return;
},
beforeCreate: (instance, options) => {
    sails.log.info(("%s %s"), 'beforeCreate', instance.$modelOptions.tableName);

    return;
},
beforeUpdate: (instance, options) => {
    sails.log.info(("%s %s"), 'beforeUpdate', instance.$modelOptions.tableName);

    var payload = {
        before: instance._previousDataValues,
        after: instance.dataValues,
        changed: instance._changed
    };
    ----> here you can write on the web socket
    return;
},
beforeDestroy: (instance, options) => {
    sails.log.info(("%s %s"), 'beforeDestroy', instance.$modelOptions.tableName);

    return;
}

}

连接:

mydb: {
    user: 'myuser',
    password: 'mypassword',
    database: 'mydatabase',
    options: {
        dialect: 'mysql',
        host: 'myhost',
        logging: true,
        define: {
            hooks: hooks
        }
    }
   }

【讨论】:

  • 这仅在同一个 sequelize 实例更改数据时有效。观察另一个应用程序或数据库本身发生的变化怎么样?是否只有通过轮询才有可能?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
相关资源
最近更新 更多