首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Model.create不是一个函数/ Model.build不是一个函数

Model.create不是一个函数/ Model.build不是一个函数
EN

Stack Overflow用户
提问于 2021-10-17 17:17:11
回答 2查看 469关注 0票数 0

我正在用Node.js,Sequelize,Mysql,Express创建一个应用程序。我对这件事很陌生,如果这个问题很愚蠢,我很抱歉。

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

以下是这些文件:

模型/user.js

代码语言:javascript
复制
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不是一个函数“。

模型/Token.js

代码语言:javascript
复制
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

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

谢谢!

编辑:

当I console.log(sequelize.models)在模型/Token.js中时,它返回:{ User: User,Token: Token }

不过!当I console.log(sequelize.models)在模型/user.js中时,它将重新运行:{ User: User }

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-17 20:32:02

好吧!我发现我做错了一件事:整理我的文件。

我的函数gAuth不应该放在模型/user.js上,而应该放在模型/Token.js上。将其留在user.js上会导致循环依赖项,这是导致错误的原因。

我从user.js中删除了user.js,将它移到了token.js,并从user.js中删除了需求(‘./token’)

我希望这能帮助一些有同样问题的人!

谢谢你约14只羊帮了我一把。

票数 0
EN

Stack Overflow用户

发布于 2021-10-17 17:42:22

试试这个:

代码语言:javascript
复制
const { Sequelize, DataTypes } = require('sequelize');
const db = require('../db/sequelize'),
      sequelize = db.sequelize,
      jwt = require('jsonwebtoken')
const Token = require('./token')(sequelize, Sequelize)

编辑:

按照文档,不要直接导入令牌,而是尝试从sequelize实例中获取令牌,如下所示:

代码语言:javascript
复制
const db = require('../db/sequelize'),
   sequelize = db.sequelize,
   jwt = require('jsonwebtoken')
const token = sequelize.models.Token
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69606796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档