我对这个续集很陌生。我尝试使用belongsToMany通过UserPermissions在用户和权限之间关联模型,这是我的代码。
-- 用户.js
const bcrypt = require('bcrypt');
const config = require('../config/general');
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
isLowercase: true,
notEmpty: true,
isEmail: true
}
},
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
isLowercase: true,
notEmpty: true,
min: 3
}
},
salt: {
type: DataTypes.STRING,
allowNull: true
},
password: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
}, {
underscored: true,
classMethods: {
associate: (models) => {
User.belongsToMany(models.Permission, {
through: 'UserPermissions',
foreignKey: 'user_id'
});
},
validPassword: (password, passwd, done) => {
const tmppass = password + config.secret;
bcrypt.compare(tmppass, passwd, (err, isMatch) => {
if (err) return done(err);
return done(null, isMatch);
});
}
}
});
User.beforeCreate( (user, option, done) => {
bcrypt.genSalt(SALT_WORK_FACTOR, (err, salt) => {
if (err) return done(err);
const tmppass = user.password + config.secret;
bcrypt.hash(tmppass, salt, (err, hash) => {
if (err) return done(err);
user.salt = salt;
user.password = hash;
return done(null, user);
});
});
});
return User;
};
-- 权限.js
module.exports = (sequelize, DataTypes) => {
const Permission = sequelize.define('Permission', {
name: {
type: DataTypes.STRING,
allowNull: false,
validate: {
notEmpty: true
}
},
slug: {
type: DataTypes.STRING,
validate: {
isLowercase: true
}
},
description: {
type: DataTypes.TEXT
}
}, {
underscored: true,
classMethods: {
associate: (models) => {
Permission.belongsToMany(models.User, {
through: 'UserPermissions',
foreignKey: 'permission_id'
});
}
}
});
return Permission;
};
根据sequelize文档关于belongsToMany的here http://docs.sequelizejs.com/manual/tutorial/associations.html#belongs-to-many-associations,belongsToMany 将创建一个新模型,该模型链接到您加入的任何模型,对吧。
这将创建一个名为 UserProject 的新模型,具有等效的外键 projectId 和 userId。属性是否为驼峰式取决于表连接的两个模型(在本例中为 User 和 Project)。Sequelize 属于多个 http://docs.sequelizejs.com/manual/tutorial/associations.html#belongs-to-many-associations
但是当我尝试使用它并迁移它时sequelize-cli
,我没有看到任何已创建的联接表。这Users表创建完成后,权限表已创建,但是用户权限未创建表。我在这里错过了什么吗?或者我的代码有问题?
我在用着postgres
方言,"pg": "^6.4.0"
and "sequelize": "^4.3.1"
哦,是的,我真的很抱歉我的英语,我的英语不太好。