我正在用Node.js,Sequelize,Mysql,Express创建一个应用程序。我对这件事很陌生,如果这个问题很愚蠢,我很抱歉。
我有两个具有一对多关系的模型:用户和令牌(用户有多个令牌,令牌有一个用户)。
以下是这些文件:
模型/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不是一个函数“。
模型/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你能帮我理解我做错了什么吗?我发现的所有答案都是关于模型的糟糕输出,但我没有看到我的错误。
谢谢!
编辑:
当I console.log(sequelize.models)在模型/Token.js中时,它返回:{ User: User,Token: Token }
不过!当I console.log(sequelize.models)在模型/user.js中时,它将重新运行:{ User: User }
发布于 2021-10-17 20:32:02
好吧!我发现我做错了一件事:整理我的文件。
我的函数gAuth不应该放在模型/user.js上,而应该放在模型/Token.js上。将其留在user.js上会导致循环依赖项,这是导致错误的原因。
我从user.js中删除了user.js,将它移到了token.js,并从user.js中删除了需求(‘./token’)
我希望这能帮助一些有同样问题的人!
谢谢你约14只羊帮了我一把。
发布于 2021-10-17 17:42:22
试试这个:
const { Sequelize, DataTypes } = require('sequelize');
const db = require('../db/sequelize'),
sequelize = db.sequelize,
jwt = require('jsonwebtoken')
const Token = require('./token')(sequelize, Sequelize)编辑:
按照文档,不要直接导入令牌,而是尝试从sequelize实例中获取令牌,如下所示:
const db = require('../db/sequelize'),
sequelize = db.sequelize,
jwt = require('jsonwebtoken')
const token = sequelize.models.Tokenhttps://stackoverflow.com/questions/69606796
复制相似问题