Node.js Sequelize有许多/belongtomany和instance方法

Node.js Sequelize有许多/belongtomany和instance方法,node.js,postgresql,express,sequelize.js,Node.js,Postgresql,Express,Sequelize.js,我正在使用SequelizeJS(版本2.0.0-rc6)和ExpressJS编写一个CRUD,用于管理系统中的用户。一个用户可以是多组用户,一组用户可以有多个用户。问题是,当我尝试将一个用户添加到一组用户时,sequelize抛出以下错误: Possibly unhandled TypeError: Cannot call method 'replace' of undefined at Object.module.exports.removeTicks (/home/app/node_mod

我正在使用SequelizeJS(版本2.0.0-rc6)和ExpressJS编写一个CRUD,用于管理系统中的用户。一个用户可以是多组用户,一组用户可以有多个用户。问题是,当我尝试将一个用户添加到一组用户时,sequelize抛出以下错误:

Possibly unhandled TypeError: Cannot call method 'replace' of undefined
at Object.module.exports.removeTicks (/home/app/node_modules/sequelize/lib/utils.js:512:14)
at Object.module.exports.addTicks (/home/app/node_modules/sequelize/lib/utils.js:508:29)
at Object.module.exports.QueryGenerator.quoteIdentifier (/home/app/node_modules/sequelize/lib/dialects/postgres/query-generator.js:881:22)
at generateJoinQueries (/home/app/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1100:72)
at Object.<anonymous> (/home/app/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1165:29)
at Array.forEach (native)
at Object.module.exports.QueryGenerator.selectQuery (/home/app/node_modules/sequelize/lib/dialects/abstract/query-generator.js:1164:25)
at module.exports.QueryInterface.select (/home/app/node_modules/sequelize/lib/query-interface.js:679:35)
at null.<anonymous> (/home/app/node_modules/sequelize/lib/model.js:728:34)
model/user.js

module.exports = function(sequelize, DataTypes) {
   var UserGroup = sequelize.define("UserGroup", {
      id: {
         type: DataTypes.INTEGER,
         autoIncrement: true,
         primaryKey: true
      },
      name: {
         type: DataTypes.STRING(100),
         allowNull: false
      }
   }, {
      tableName: "user_group",
      classMethods: {
         associate: function(models) {
            UserGroup.hasMany(models.User, {
               through: "user_to_user_group"
            });
         }
      }
   });
   return UserGroup;
};
module.exports = function(sequelize, DataTypes) {
   var User = sequelize.define("User", {
      id: {
         type: DataTypes.INTEGER,
         autoIncrement: true,
         primaryKey: true
      },
      first_name: {
         type: DataTypes.STRING(100),
         allowNull: false
      },
      last_name: {
         type: DataTypes.STRING(100),
         allowNull: false
      },
      cpf: DataTypes.STRING(11),
      rg: DataTypes.STRING(10),
      birth_day: DataTypes.DATE,
      password: {
         type: DataTypes.STRING(100),
         allowNull: false
      },
      active: {
         type: DataTypes.BOOLEAN,
         defaultValue: false
      }
   }, {
      tableName: "user",
      classMethods: {
         associate: function(models) {
            User.hasMany(models.Email);
            User.hasMany(models.Phone);
            User.hasMany(models.Address);
            User.belongsToMany(models.UserGroup, {
               through: "user_to_user_group"
            });
         }
      },
   });
   return User;
};
router.post('/user/add', function(req, res, next) {

   var data = req.body;

   model.User.build(data.user)
   .save()
   .then(function(newUser){
      async.map(data.user.user_group_ids, function(userGroupId, callback){
         model.UserGroup.find({
            where: {
               id: userGroupId
            }
         })
         .then(function(userGroup) {
            // I'm getting here without any trouble
            userGroup.addUser(newUser) // this line throws the error
            .then(function(){
               callback(null, userGroup);    
             });
         });
      }, function(error, userGroups){
         if (!error) {
            res.status(200).send('User created!');
         } else {
            res.status(500).send('Something bad happened!');
         }
      });
   })
   .catch(function(error){
      console.log(error);
   });
});
route/user.js

module.exports = function(sequelize, DataTypes) {
   var UserGroup = sequelize.define("UserGroup", {
      id: {
         type: DataTypes.INTEGER,
         autoIncrement: true,
         primaryKey: true
      },
      name: {
         type: DataTypes.STRING(100),
         allowNull: false
      }
   }, {
      tableName: "user_group",
      classMethods: {
         associate: function(models) {
            UserGroup.hasMany(models.User, {
               through: "user_to_user_group"
            });
         }
      }
   });
   return UserGroup;
};
module.exports = function(sequelize, DataTypes) {
   var User = sequelize.define("User", {
      id: {
         type: DataTypes.INTEGER,
         autoIncrement: true,
         primaryKey: true
      },
      first_name: {
         type: DataTypes.STRING(100),
         allowNull: false
      },
      last_name: {
         type: DataTypes.STRING(100),
         allowNull: false
      },
      cpf: DataTypes.STRING(11),
      rg: DataTypes.STRING(10),
      birth_day: DataTypes.DATE,
      password: {
         type: DataTypes.STRING(100),
         allowNull: false
      },
      active: {
         type: DataTypes.BOOLEAN,
         defaultValue: false
      }
   }, {
      tableName: "user",
      classMethods: {
         associate: function(models) {
            User.hasMany(models.Email);
            User.hasMany(models.Phone);
            User.hasMany(models.Address);
            User.belongsToMany(models.UserGroup, {
               through: "user_to_user_group"
            });
         }
      },
   });
   return User;
};
router.post('/user/add', function(req, res, next) {

   var data = req.body;

   model.User.build(data.user)
   .save()
   .then(function(newUser){
      async.map(data.user.user_group_ids, function(userGroupId, callback){
         model.UserGroup.find({
            where: {
               id: userGroupId
            }
         })
         .then(function(userGroup) {
            // I'm getting here without any trouble
            userGroup.addUser(newUser) // this line throws the error
            .then(function(){
               callback(null, userGroup);    
             });
         });
      }, function(error, userGroups){
         if (!error) {
            res.status(200).send('User created!');
         } else {
            res.status(500).send('Something bad happened!');
         }
      });
   })
   .catch(function(error){
      console.log(error);
   });
});

如果同时使用hasMany和BelongToMany,请将hasMany切换为BelongToMany。我不完全确定这是错误,但让我们从这里开始。另外,记住在一个内部返回承诺,这样错误就可以通过承诺链正确传播。