如何在 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
中删除了classMethods
和instanceMethods
选项。 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 版已经改变了这一点,其他带有 instanceMethods
和 classMethods
的解决方案不再起作用。见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 运行 AND 和 Or 运算符
如何使用node.js控制sequelize中的内连接查询?
如何在 node.js 中使用 sequelize-npm 实现与连接表的一对多关系