Sequelize Association中的类方法不起作用

时间:2017-07-03 15:31:09

标签: node.js sequelize.js

我正在尝试在类方法中设置关联,但它不能正常工作!

const User = sequelize.define('User', {
    email: DataTypes.STRING,
    password: DataTypes.STRING,
}, {
    classMethods: {
        associate: (models) => {
            User.hasMany(models.AnotherModel, {foreignKey: 'userId'});
        },
   }
});

但是当我在classMethods块之外设置关联时,它可以工作:

User.associate = function (models) {
    User.hasMany(models.AnotherModel, {foreignKey: 'userId'});
};

为什么classMethods内的代码阻止无效?

续集版本:4.2.0

3 个答案:

答案 0 :(得分:4)

这是预期的行为,classmethod语法指的是续集版本< 4。

从v4开始,sequelize已经朝着js类语法发展,因此也发生了变化。

升级手册here详细介绍了

答案 1 :(得分:0)

记住何时库所有者将旧方法保留一段时间,让它报告它已被弃用,但仍然可以运行,所以当我们重新审视一个已有三年历史的项目时,并且不知道为什么将代码提前中断整个宇宙,我们可能会在分辨率上找到一些方向?我记得那些日子。令人愉快的日子,那些。

我们正处在大型代码转发更新的中间,将旧的应用程序引入到Node等的现代版本中,并且胡扯,一切都被破坏了。这会很有趣。

深入研究,这是“预期的行为”,但是,哇,这是一种可怕的学习方式。 :(

答案 2 :(得分:0)

,带有“ sequelize”:“ 5”。 在我的代码中用它来开发秘鲁的OSE服务器:

'use strict';
module.exports = (sequelize, DataTypes) => {

const UserModel = sequelize.define('user', {
    user: DataTypes.STRING,
    password: DataTypes.STRING,
    description: DataTypes.STRING
}, {});
UserModel.associate = function (models) {
    // associations can be defined here
};
UserModel['getHashName'] = () => {
    return 'UserCache';
};
UserModel['getCacheKey'] = () => {
    return 'user';
};
UserModel['getCacheValue'] = () => {
    return 'password';
};
return UserModel;
};

接下来的通话:

console.log(User.getHashName());
console.log(User.getCacheKey());
console.log(User.getCacheValue());