Javascript Sequelize.set错误,.set不是函数

Javascript Sequelize.set错误,.set不是函数,javascript,mysql,node.js,join,sequelize.js,Javascript,Mysql,Node.js,Join,Sequelize.js,我正在尝试设置一个belongsTo,并且有许多关联,这些关联似乎正在工作,但是当我运行.set时,我得到了错误fighterData.setUsers不是一个函数。方言是mySql。这是我的密码: Fighters.belongsTo(Users) Users.hasMany(Fighters); Users.sync() Fighters.sync() //creates the table if it doesn't exist const insertFighter = functi

我正在尝试设置一个belongsTo,并且有许多关联,这些关联似乎正在工作,但是当我运行.set时,我得到了错误
fighterData.setUsers不是一个函数
。方言是mySql。这是我的密码:

Fighters.belongsTo(Users)
Users.hasMany(Fighters);

Users.sync()
Fighters.sync()
//creates the table if it doesn't exist

const insertFighter = function(obj, sessId) {
  return Fighters.create(obj, {returning: true}).then((fighterData) => {
    //console.log('inserted a fighter \n', fighterData);
    return Users.findOne({
      where: {
        id: sessId
      }
    }).then((userData) => {
      //console.log('fighterData in findOne promise \n', fighterData)
      return fighterData.setUsers(userData)
    }).then((success)=> {
      console.log('user fighter join success')
      return
    }).catch((err)=> {
      console.log('user fighter join error \n', err)
      return
    })
  }).catch((err)=> {
    console.log('error inserting fighter \n', err);
  })
}
记录的错误是
用户加入错误
。 有趣的是,
userData.setFighters(fighterData)
工作成功,但这不是我需要的

编辑

这就是fighterData的含义:

fighterData in findOne promise 
 Fighters {
  dataValues:
   { id: 7,
     name: 'Gilbert Burns',
     image:
      'https://www.sherdog.com/image_crop/200/300/_images/fighter/20140806063215_IMG_8432.JPG',
     next_opponent: 'Kamaru Usman',
     next_fight: 'July 11, 2020 ',
     style: 'mma',
     updatedAt: 2020-06-17T06:00:40.368Z,
     createdAt: 2020-06-17T06:00:40.368Z },
  _previousDataValues:
   { name: 'Gilbert Burns',
     image:
      'https://www.sherdog.com/image_crop/200/300/_images/fighter/20140806063215_IMG_8432.JPG',
     next_opponent: 'Kamaru Usman',
     next_fight: 'July 11, 2020 ',
     style: 'mma',
     id: 7,
     createdAt: 2020-06-17T06:00:40.368Z,
     updatedAt: 2020-06-17T06:00:40.368Z,
     UserId: undefined },
  _changed:
   { name: false,
     image: false,
     next_opponent: false,
     next_fight: false,
     style: false,
     id: false,
     createdAt: false,
     updatedAt: false,
     UserId: false },
  _modelOptions:
   { timestamps: true,
     validate: {},
     freezeTableName: false,
     underscored: false,
     paranoid: false,
     rejectOnEmpty: false,
     whereCollection: null,
     schema: null,
     schemaDelimiter: '',
     defaultScope: {},
     scopes: {},
     indexes: [],
     name: { plural: 'Fighters', singular: 'Fighter' },
     omitNull: false,
     sequelize:
      Sequelize {
        options: [Object],
        config: [Object],
        dialect: [MysqlDialect],
        queryInterface: [QueryInterface],
        models: [Object],
        modelManager: [ModelManager],
        connectionManager: [ConnectionManager],
        importCache: {} },
     hooks: {} },
  _options:
   { isNewRecord: true,
     _schema: null,
     _schemaDelimiter: '',
     attributes: undefined,
     include: undefined,
     raw: undefined,
     silent: undefined },
  isNewRecord: false }

这是将一架战斗机的信息输入数据库后返回的

问题在于模型的命名

Sequelize希望您的模型以单数形式命名(
User
而不是
Users
),因此它会混淆它应该为您的关联命名生成的setter和getter方法

如果您尝试
fighterData.setUser(userData)
而不是
fighterData.setUsers(userData)
,它应该可以工作

如果您想改用
设置用户
,则必须对模型进行调整,以告知Sequelize将
用户
用作
用户
的单数形式:

Users.init({
    sessId: Sequelize.STRING
 }, {
    sequelize: sequelize,
    name: {
        singular: 'users'
    }
});
你也可以用同样的方法改写复数形式


您可以在此处阅读更多信息:

您在哪里定义“fighterData”?@OscarVelandia fighterData是从运行
Fighters.create()时在承诺链中返回的模型。
如果执行console.log of fighterData,您会得到什么?@OscarVelandia我对OP进行了编辑