![](/img/trans.png)
[英]belongsToMany called with something that's not a subclass of Sequelize.Model error
[英]${this.name}.hasMany called with something that's not a subclass of Sequelize.Model
我正在尝试按照 sequelize 文档创建角色和用户之间的关联(角色有很多用户)。 值得一提的是,我没有使用define
方法来创建我的模型,而是使用init
,就像这里提到的一样。 话虽如此,我无法创建此关联。
这是用户 model:
const { DataTypes, Model } = require('sequelize');
const sequelize = require('../database/connection');
const bcryptjs = require('bcryptjs');
const Role = require('./role')
const _ = require('lodash')
const Demande = require('./demande')
class User extends Model {
getOwnerId (){
return this.idUser
}
}
User.init({
idUser: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
email: {
type: DataTypes.STRING,
unique: true,
allowNull: false,
validate: {
isEmail: {
msg: "Email non valid"
}
},
},
password: {
type: DataTypes.STRING,
allowNull: false,
validate: {
passwordValidator(value) {
if (!(/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/).test(value))
throw new Error("Le mot de passe doit contenir au moins 8 caractères numériques et alphabétiques")
}
},
},
changedPassword: {
type: DataTypes.DATE,
allowNull: true,
},
nom: {
type: DataTypes.STRING,
notEmpty: true,
allowNull: true,
},
prenom: {
type: DataTypes.STRING,
notEmpty: true,
allowNull: true,
},
dateNaissance: {
type: DataTypes.DATEONLY,
allowNull: true,
},
wilayaNaissance: {
type: DataTypes.INTEGER,
allowNull: true,
validate: {
min: 1,
max: 58,
},
},
sexe: {
type: DataTypes.STRING,
allowNull: true,
notEmpty: true,
validate: {
notEmpty: true,
isIn: {
args: [['homme', 'femme']],
msg: 'Le sexe doit être homme ou femme'
}
}
},
telephone: {
type: DataTypes.STRING,
allowNull: true,
validate: {
notEmpty: true,
telephoneValidator(value) {
if (value == null || !(/^\+*[0-9]+/).test(value)) {
throw new Error("Format telephone invalide")
}
}
}
},
adress: {
type: DataTypes.STRING,
allowNull: true,
},
completedSignUp: {
type: DataTypes.BOOLEAN,
allowNull: false,
defaultValue: false,
},
},
{
tableName: 'users',
sequelize,
modelName: 'User',
}
)
User.hasMany(Demande, { foreignKey: "idUser" })
User.belongsTo(Role, {sourceKey: "idRole", sourceKey: "idRole"})
module.exports = User
这里是角色model:
const { DataTypes, Model } = require('sequelize');
const sequelize = require('../database/connection');
const User = require('./user')
class Role extends Model {}
Role.init({
idRole: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
nomRole: {
type: DataTypes.STRING,
notEmpty: true,
allowNull: false,
},
descriptionRole: {
type: DataTypes.STRING,
allowNull: true,
},
}, {
tableName: 'roles',
sequelize,
modelName: 'Role',
})
Role.hasMany(User, { foreignKey: "idRole", sourceKey: "idRole" })
module.exports = Role
和连接文件
const { Sequelize } = require('sequelize');
require('dotenv').config()
const sequelize = new Sequelize(
process.env.DB_NAME,
process.env.DB_USERNAME,
process.env.DB_PASSWORD, {
host: process.env.DB_HOST,
dialect: process.env.DB_DIALECT
});
sequelize.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
}).catch(e => {
console.error('Unable to connect to the database:', e);
})
module.exports = sequelize
module.exports = sequelize
这个答案在这里为我解决了,我在 initialize.js 中导入了所有需要的模型,我在 index.js 中需要后者
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.