【问题标题】:Sequelize - called with something that's not a subclass of Sequelize.ModelSequelize - 使用不是 Sequelize.Model 子类的东西调用
【发布时间】:2018-04-20 11:25:08
【问题描述】:

我正在开发应用程序,但我在使用 Node.js 和 Sequelize for Postgresql 时遇到了这个问题:

      throw new Error(this.name + '.' + Utils.lowercaseFirst(Type.toString()) + ' called with something that\'s not a subclass of Sequelize.Model');
      ^

Error: Expense.class BelongsTo extends Association {
  constructor(source, target, options) {
    super(source, target, options);

    <....LOT OF CODE FROM SEQUELIZE ....>

    if ((fieldsOrOptions || {}).transaction instanceof Transaction) {
      options.transaction = fieldsOrOptions.transaction;
    }
    options.logging = (fieldsOrOptions || {}).logging;

    return association.target.create(values, fieldsOrOptions).then(newAssociatedObject =>
      sourceInstance[association.accessors.set](newAssociatedObject, options)
    );
  }
} called with something that's not a subclass of Sequelize.Model

我不明白这个错误,尤其是最后一行“用不是 Sequelize.Model 子类的东西调用”。 这是模型:

用户模型

const models = require('./index');
const Expense = models.User;

module.exports = (sequelize, DataTypes) => {
  var User = sequelize.define('User', {
    firstname: DataTypes.STRING,
    lastname: DataTypes.STRING,
    email: DataTypes.STRING,
    password: DataTypes.STRING
  }, {
    classMethods: {
      associate: function(models) {
        User.hasMany(models.Expense);
      }
    }
  });
  console.log(models);

  User.hasMany(Expense, {as: 'Expenses', foreignKey: 'userId'});

  return User;
};

费用模型

const models = require('./index');
const User = models.User;

module.exports = (sequelize, DataTypes) => {
  var Expense = sequelize.define('Expense', {
    name: DataTypes.STRING,
    amount: DataTypes.INTEGER,
    date: DataTypes.INTEGER
  }, {
    classMethods: {
    }
  });

  Expense.belongsTo(User, { foreignKey: 'userId' });

  return Expense;
};

以及创建费用的控制器

createExpense: function(req, res) {
    const user = User.findOne({ where: { id: req.params.id } });
    Expense.create({
        name: req.body.name,
        amount: req.body.amount,
        date: req.body.date,
        User: user
    },{
       include: [
           {
               model: User
           }
       ]
    }).then((created) => {
        res.status(200).send({ success: true, message: 'Dépense ajoutée !' });
    });
}

是否有人已经看到类似的错误?我搜索了几天没有任何问题,如果有人可以帮助我将不胜感激,

谢谢!

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    我之前也有同样的问题,但我找到了原因。关键是你的模型必须在同一个sequelize类下。

    你可以在 github 上查看我的项目mini-shop

    【讨论】:

      【解决方案2】:

      虽然晚了 3 年...我认为这是由于进口不当造成的。 “费用模型”的“用户模型”中的导入使用了这一行,看起来有点可疑:

      const Expense = models.User;

      但从相当普遍的角度来看,这种错误消息可能是在创建关联时出现错误的提示,例如User.hasMany(Expense, {as: 'Expenses', foreignKey: 'userId'});

      这里是another answer,关于类似的问题。例如,在我的情况下,错误来自未使用定义名称访问我的模型(

      【讨论】:

        猜你喜欢
        • 2019-05-21
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 2020-09-21
        • 1970-01-01
        • 2020-12-20
        • 2020-09-26
        • 1970-01-01
        相关资源
        最近更新 更多