如何在 Node.JS 中向 sequelize.js 添加自定义函数?

Posted

技术标签:

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

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

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

在哪里定义这些函数?

【问题讨论】:

您可能正在寻找:docs.sequelizejs.com/en/stable/docs/models/#expansion-of-models 没有。这是只在一个实例(行)上运行一个方法。 但是classMethods是针对全局模型的。 我想要 Client.FindAll(...).sendEmail... ||没有记录如何让 classMethods 处理 FindAll 中返回的行 【参考方案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;
      
    
  );
;

【讨论】:

以上是关于如何在 Node.JS 中向 sequelize.js 添加自定义函数?的主要内容,如果未能解决你的问题,请参考以下文章

Node.js - 如何使用 Sequelize 交易

如何在 Node.js 中使用 Sequelize 运行 AND 和 Or 运算符

如何使用node.js控制sequelize中的内连接查询?

如何在 node.js 中使用 sequelize-npm 实现与连接表的一对多关系

Node.js / Sequelize.js / Express.js - 如何插入多对多关联? (同步/异步?)

如何在 Sequelize 中创建一个表以使用 Node JS 存储在 Postgresql 中