【问题标题】:Sequelize TypeError: phone.setUser is not a FunctionSequelize TypeError: phone.setUser is not a Function
【发布时间】:2018-02-01 09:36:44
【问题描述】:

我有点迷茫,如果能提供任何帮助,我将不胜感激。我通过userPhones 表在用户表和电话表之间建立了 M:M 关联。

user.js

  module.exports = (sequelize, DataTypes) => {
    const Users = sequelize.define('Users', {
    givenName: {
      type: DataTypes.STRING
    },
    sn: {
      type: DataTypes.STRING
    },
    mail: {
      type: DataTypes.STRING
    },
    title: {
      type: DataTypes.STRING
    },
    department: {
      type: DataTypes.STRING
    },
    sAMAccountName: {
      type: DataTypes.STRING,
      primaryKey: true
    },
    displayName: {
      type: DataTypes.STRING
    },
  }, {
    freezeTableName: true,
    timestamps: false

  });
  return Users; 
  };

phone.js

  module.exports = (sequelize, DataTypes) => {  
  const Phones = sequelize.define('Phones', {
    full_number: {
      type: DataTypes.STRING
    },
    telephone: {
      type: DataTypes.STRING
    },
    division_id: {
      type: DataTypes.FLOAT
   },
  }, {
    freezeTableName: true,
    timestamps: false

  });

  return Phones; 
  };

db.js

const Sequelize = require ('sequelize');

const sequelize = new Sequelize('db', 'user', 'password', {
    host: '127.0.0.1',
    dialect: 'mssql',
    pool: {
        max: 9,
        min: 0,
        idle: 10000
    }
});

const db = {};

db.Sequelize = Sequelize; 
db.sequelize = sequelize; 

//Gets models

db.users = require('./models/users.js')(sequelize,Sequelize);
db.phones = require('./models/phones.js')(sequelize,Sequelize);
db.userPhones = sequelize.define('userPhones')

//Sequelize Associations

db.users.belongsToMany(db.phones, {through: 'userPhones'});
db.phones.belongsToMany(db.users, {as: 'owners', through: 'userPhones'});

// Sync SQL with Sequelize Models USE CAUTION
sequelize.sync({alter:true});

module.exports = db;

将用户分配给电话的电话发布路线

const express = require('express'),
  router = express.Router(),
  db = require('../db')
  ;


Phones = db.phones;
UserPhones = db.UserPhones;

// Single Phone User Assignment POST route

router.route('/:id/users')
  .post((req, res) => {
    let users = req.body.UserSAMAccountName;

    Phones.findById(req.params.id)
      .then(function (phone) {
        if (!phone) {
          res.status(404).json({ message: 'record not found!' })
        }
        phone.setUsers([users])
        .then(associatedUsers => {
          res.status(200).json({ message: `${associatedUsers} added!`});
        })

      })
      .catch(function (err) {
        res.status(500).json({ error: `${err}`});
      })

  });


module.exports = router;

我之前可以设置为用户分配电话,反之亦然。我不确定发生了什么,但前几天它刚刚停止工作,当我发布到 API 时,我现在得到了:

TypeError: phone.setUsers 不是函数

我尝试运行sequelize.sync({force:true}); 只是为了测试并查看重新初始化所有内容是否可以解决问题,但我似乎还没有让事情回到正轨。

我已经阅读了有关检查 Phones.instance.prototypes 的信息,但我不太清楚如何找到它。

更新:我没有提到从我的用户路由运行此程序以将电话分配给用户没有任何问题。

用于将电话分配给用户的用户 POST 路由

const express = require('express'),
  router = express.Router(),
  db = require('../db')
  ;

  Users = db.users;
  UserPhones = db.UserPhones;

// Single User->Phone Assignment POST route

router.route('/:id/phones')
  .post((req, res) => {
    let phones = req.body.phoneID;

    Users.findById(req.params.id)
      .then(function (user) {
        if (!user) {
          res.status(404).json({ message: 'record not found!' })
        }
        user.setPhones([phones])
        .then(associatedPhones => {
          res.status(200).json({ message: `${associatedPhones} added!`});
        })

      })
      .catch(function (err) {
        res.status(500).json(err);
      })

  });

  module.exports = router;

【问题讨论】:

  • 您是否尝试在phone.setUsers([users]) 之前执行console.log(phone) 以查看您有什么?
  • 检查 userPhones.setUsers
  • @ivo 是的,它正在吐出一堆查询,所以我正在将其写入日志文件,以便进一步检查它

标签: javascript node.js sequelize.js


【解决方案1】:

尝试phone.setOwnersphone.setowners,因为您将与电话关联的用户模型重命名为“所有者”。

【讨论】:

  • Ahhhhhh .. 我没有意识到这会改变这些调用的命名。非常感谢!
  • 我没有这方面的经验,大声笑,但我是根据阅读 docs.sequelizejs.com/manual/tutorial/… 猜测的,请让我知道这是否真的解决了它:)
  • 确实如此。我不确定我是如何在他们的文档中错过的,但同时我并不感到惊讶,因为他们的文档有时有点混乱
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
  • 2021-01-21
  • 2021-10-01
相关资源
最近更新 更多