我在 sequelize 的关联中遇到了问题
我的数据已保存在数据库中,但 Angular 色未保存
我使用 postgres 进行注册,但面临未定义 setRole 的问题
我的代码是
Auth_User.js 是我们在这个文件中创建关联的 signIn 和 signUp 用户的模型
import Sequelize from "sequelize";
import { sequelize } from "../Database/database";
const Auth_User = sequelize.define("authUsers", {
userName: {
type: Sequelize.STRING,
},
email: {
type: Sequelize.STRING,
},
password: {
type: Sequelize.STRING,
},
});
Auth_User.associate = function(models) {
Auth_User.belongsToMany(models.Role, { through: 'user_roles', foreignKey: 'userId', otherKey: 'roleId'});
};
export default Auth_User;
Role.js 在这个文件中,我们创建了一个 Angular 色模型,其中有 admin 和 userimport Sequelize from "sequelize";
import { sequelize } from "../Database/database";
const Role = sequelize.define('roles', {
id: {
type: Sequelize.INTEGER,
primaryKey: true
},
name: {
type: Sequelize.STRING
}
});
Role.associate = function(models) {
Role.belongsToMany(models.Auth_User, { through: 'user_roles', foreignKey: 'roleId', otherKey: 'userId'})
};
export default Role;
了解 signup.js在这里我们创建注册我们面临这个文件中的问题
在这里制造问题 user.setRole 不是函数
import Auth_User from '../Model/auth.model';
import Role from '../Model/role.model';
var bcrypt = require('bcryptjs');
var jwt = require('jsonwebtoken');
var db= require('../Database/database')
const Op = db.Sequelize.Op;
export const signup = (req, res) => {
// Save Auth_User to Database
console.log("Processing func -> SignUp");
Auth_User.create({
userName: req.body.userName,
email: req.body.email,
password: bcrypt.hashSync(req.body.password, 8)
}).then(user => {
Role.findAll({
where: {
name: {
[Op.or]: req.body.roles.map(role => role.toUpperCase())
}
}
}).then(roles => {
console.log(user)
user.setRole(roles).then(() => {
res.send("User registered successfully!");
});
}).catch(err => {
res.status(500).send("Error -> " + err);
});
}).catch(err => {
res.status(500).send("Fail! Error -> " + err);
})
}
最佳答案
首先,我建议您对在模型定义中选择的 model name
非常小心: sequelize.define(modelName, attributes, options)
。 Sequelize 会自动为您生成复数,因此定义表格的一个好方法是始终使用单数,但这当然是完全可选的。这意味着如果您使用 role
而不是 roles
作为模型名称,Sequelize 将自动将表名称设置为 roles
。
第二个建议是不要在同一个模型名称中使用大写,因为当你必须处理自动创建的外键并且你想通过 object.property
访问它们时,你将不得不使用大写或小写,这取决于你如何定义名称.因此,例如,如果您在 companyId
表中有一个 Users
,为了获得它,如果您的公司表的模型名称写为 user.CompanyId
和 Company
如果它写为 user.companyId
,则必须调用 company
。
最后,在回答您的主要问题时,我建议您查看 Sequelize 的官方文档,了解有关添加到 ( https://sequelize.org/master/manual/assocs.html#special-methods-mixins-added-to-instances ) 实例的 特殊方法/混合,您将在其中找到所有不同的组合,具体取决于关联。在您的特定情况下,对于 belongsToMany
关联,必须使用复数形式使用其特殊方法。在您的情况下,它应该是 user.setRoles(roles)
。但是,如果您更喜欢使用 add method
,则这不适用,它可以用作 user.addRole(roles)
或 user.addRoles(roles)
关于javascript - user.setRole 不是使用 sequelize postgres 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66256494/