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 帮助我。
我正在使用 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 帮助我。