【问题标题】:How to add custom function to sequelize.js in Node.JS?如何在 Node.JS 中向 sequelize.js 添加自定义函数?
【发布时间】:2015-07-18 00:05:06
【问题描述】:

例如,我有一个客户端模型。 我想添加新功能“sendEmail”

该功能需要发送邮件给一个客户,还是同时给多个客户发送邮件?

在哪里定义这些函数?

【问题讨论】:

标签: node.js sequelize.js


【解决方案1】:

https://sequelize.org/v4/manual/tutorial/upgrade-to-v4.html#config-options

sequelize.define 中删除了classMethodsinstanceMethods 选项。 Sequelize 模型现在是 ES6 类。您可以像这样设置类/实例级别的方法

const Model = sequelize.define('Model', {
    ...
}, {
    classMethods: {
        associate: function (model) {...}
    },
    instanceMethods: {
        someMethod: function () { ...}
    }
});

新的

const Model = sequelize.define('Model', {
    ...
});

// Class Method
Model.associate = function (models) {
    ...associate the models
};

// Instance Method
Model.prototype.someMethod = function () {..}

【讨论】:

    【解决方案2】:

    sequelize 的第 4 版已经改变了这一点,其他带有 instanceMethodsclassMethods 的解决方案不再起作用。见Upgrade to V4 / Breaking changes

    新的做法如下:

    const Model = sequelize.define('Model', {
        ...
    });
    
    // Class Method
    Model.myCustomQuery = function (param, param2) {  };
    
    // Instance Method
    Model.prototype.myCustomSetter = function (param, param2) {  }
    

    【讨论】:

    • 这个答案应该被接受,因为它是添加类方法和实例方法的新方法。
    • 从模型外部访问时,myCustomSetter 未定义的原因可能是什么?我有这个问题。有什么提示吗?
    • 这是一个实例方法,而不是一个类方法,因此你必须有一个 Model 实例才能访问它@RameshPareek
    • 谢谢@Yehonatan。即使使用 new 关键字初始化后,我也无法访问这些方法,可能是什么原因?
    • 链接已失效@jlh
    【解决方案3】:

    我遇到了同样的问题,对我来说,在 classMethods 对象中添加方法很有效

    // models/Client.js
    'use strict';
    
    module.exports = function(sequelize, DataTypes) {
      return sequelize.define('Client', {
        first_name: DataTypes.STRING,
        last_name: DataTypes.STRING,
      }, {
        classMethods: {
          getFullName: function() {
            return this.first_name + ' ' + this.last_name;
          }
        }
      });
    };
    

    【讨论】:

      【解决方案4】:

      按照Jan Meier 指出的那样使用instanceMethods

      在您的客户示例中:

      // models/Client.js
      'use strict';
      
      module.exports = function(sequelize, DataTypes) {
        return sequelize.define('Client', {
          first_name: DataTypes.STRING,
          last_name: DataTypes.STRING,
        }, {
          instanceMethods: {
            getFullName: function() {
              return this.first_name + ' ' + this.last_name;
            }
          }
        });
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-22
        • 2018-12-28
        • 2012-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多