javascript - user.setRole 不是使用 sequelize postgres 的函数

标签 javascript node.js sequelize.js

我在 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 和 user
import 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.CompanyIdCompany 如果它写为 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/

相关文章:

javascript - 对包含空单元格的表格进行排序

javascript - 我如何更改 <h :selectOneMenu> Dropdown menu on selecting an entry in JSF? 的颜色

javascript - Mongoose 找到多个匹配项

javascript - Node.js Socket.io 建立多个连接

node.js - 如何在 Sequelize/Node.js 中设置沙箱帐户?

javascript - Sequelize with PostgreSQL 中与外键约束的丰富自关联

javascript - Jquery/Javascript 中的变量作用域

javascript - node.js 和 ejs 渲染问题

javascript - 从 chokidar.watch(path_file).on ('change' 内的 fs.readFile 获取空字符串,...)

sequelize.js - 羽毛 Sequelize 和一次性联想