Sequelize - Model.create 不是函数/Model.build 不是函数

Sequelize - Model.create is not a function / Model.build is not a function

我正在使用 Node.js、Sequelize、Mysql、Express 创建一个应用程序。我对此很陌生,如果这个问题很愚蠢,请见谅。

我有两个具有一对多关系的模型:用户和令牌(一个用户有多个令牌,一个令牌有一个用户)。

这是文件:

models/user.js

const { Sequelize, DataTypes } = require('sequelize');
const Token = require('./token')
const db = require('../db/sequelize'),
      sequelize = db.sequelize,
      jwt = require('jsonwebtoken')

// Model for a user (player)

const User = sequelize.define('User', {
    // All the columns
})
    
User.gAuth = async function(user) {
    const token = jwt.sign({id: user.id.toString() },
        'password',
        {
            expiresIn: '7 days'
        })

    console.log(token)
    console.log(Token)

    const newToken = Token.create({
        token,
        user: this.id
    })

    console.log(newToken)

    await newToken.save()

    return token

}

module.exports = User

在“const newToken = Token.create({...})”上我有错误。它说:“Token.create 不是函数”。我尝试构建,我有:“TypeError:Token.build 不是一个函数”。

models/token.js

const { Sequelize, DataTypes } = require('sequelize');
const db = require('../db/sequelize'),
    sequelize = db.sequelize
const User = require('./user')

const Token = sequelize.define('Token', {
    // All the columns
})

User.hasMany(Token, {
    as: 'tokens'
})

Token.belongsTo(User, {
    foreignKey: 'UserId',
    as: 'user'
})

module.exports = Token

你能帮我理解我做错了什么吗?我找到的所有答案都是关于模型的错误导出,但我没有看到我的错误。

谢谢!

编辑:

当我 console.log(sequelize.models) 在 models/token.js 中 returns : { User: User, Token: Token }

但是!当我在 models/user.js 中 console.log(sequelize.models) 时,它会重新调整:{ User: User }

试试这个:

const { Sequelize, DataTypes } = require('sequelize');
const db = require('../db/sequelize'),
      sequelize = db.sequelize,
      jwt = require('jsonwebtoken')
const Token = require('./token')(sequelize, Sequelize)

编辑:

根据 docs 而不是直接导入令牌尝试从 sequelize 实例中获取令牌,如下所示:

const db = require('../db/sequelize'),
   sequelize = db.sequelize,
   jwt = require('jsonwebtoken')
const token = sequelize.models.Token

好的!我发现我做错了:构建我的文件。

我的函数 gAuth 不应该在 models/user.js 上,而是在 models/token.js 上。将其保留在 user.js 上会导致 循环依赖性 ,从而导致错误。

我已经从 user.js 中删除了 gAuth,将其移至 token.js 并从 user.js

中删除了 require('./token')

我希望这可以帮助一些遇到同样问题的人!

非常感谢@about14sheep 帮助我。