【问题标题】:Sequelize.js node.js many to many associationSequelize.js node.js 多对多关联
【发布时间】:2014-05-27 05:44:19
【问题描述】:

我正在使用 sequelize node.js 模块在 Postgres sql 中形成模式

我有以下两个项目架构和我的用户。

项目

module.exports = function(sequelize, DataTypes) {
    var project = sequelize.define('project', {
        description: DataTypes.STRING
    },{
        classMethods: {
            associate: function(models) {
                project.hasMany(models.myusers,{through:"project_persons"});
            }
        }
    });

    return project;
};

我的用户

    module.exports = function(sequelize, DataTypes) {
        var myusers = sequelize.define('myusers', {
        name: DataTypes.STRING
    },{
        classMethods: {
            associate: function(models) {
                myusers.hasMany(models.project,{through:"project_persons"});
            }
        }
    });

    return myusers;
};

我试图建立多对多的关系。当我运行应用程序第三个表“project_person 已创建”。

index.js(路由)我有以下代码

models.myusers.create({
        description:"newuser"
    }).success(function(user) {
        var project1;
        var project2;

        models.project.create({
            description:"p1"
        }).success(function(p1){
            console.log("Project 1 created");
            project1 = p1;
        });
         models.project.create({
            description:"p2"
        }).success(function(p2){
            console.log("Project 2 created");
            project2 = p2;
        });

       user.setProjects([project1,project2]).success(function() {
                console.log("CREATION SUCESS");
       });
    });

在屏幕上显示以下错误

/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/has-many-double-linked.js:151 foreignIdentifier] = ((targetKeys.length === 1) ? unassociatedObject[targetKey ^ TypeError:无法读取未定义的属性“id” 在/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/has-many-double-linked.js:151:88 在 Array.map (本机) 在 module.exports.HasManyDoubleLinked.injectSetter (/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/has-many-double-linked.js:147:38) 在 instance.(匿名函数).success.proxy.events (/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/has-many.js:317:39) 在 EventEmitter.emit (events.js:95:17) 在 module.exports.CustomEventEmitter.emit (/home/hassan/Desktop/node/node_modules/sequelize/lib/emitters/custom-event-emitter.js:107:33) 在空。 (/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/has-many-double-linked.js:74:63) 在 EventEmitter.emit (events.js:95:17) 在 module.exports.CustomEventEmitter.emit (/home/hassan/Desktop/node/node_modules/sequelize/lib/emitters/custom-event-emitter.js:107:33) 在emitter.query.success.error.proxy.events (/home/hassan/Desktop/node/node_modules/sequelize/lib/query-interface.js:890:19) 4 月 24 日 10:31:47 - [nodemon] 应用程序崩溃 - 在开始之前等待文件更改...

任何人都可以告诉我哪里出错了。

【问题讨论】:

    标签: javascript node.js postgresql sequelize.js


    【解决方案1】:

    Sequelize 是一个异步库,因此您必须使用回调。这应该可以按您的预期工作:

    models.myusers.create({ description: "newuser" }).success(function(user) {
      models.project.create({ description: "p1" }).success(function(project1) {
        console.log("Project 1 created");
        models.project.create({ description: "p2" }).success(function(project2) {
          console.log("Project 2 created");
          user.setProjects([ project1, project2 ]).success(function() {
            console.log("CREATION SUCESS");
          });
        });
      });
    });
    

    更好的是:正确使用complete() 和错误(如果有):

    models.myusers.create({ description: "newuser" }).complete(function(err, user) {
      if (err) throw err;
      models.project.create({ description: "p1" }).complete(function(err, project1) {
        if (err) throw err;
        console.log("Project 1 created");
        models.project.create({ description: "p2" }).complete(function(err, project2) {
          if (err) throw err;
          console.log("Project 2 created");
          user.setProjects([ project1, project2 ]).complete(function(err, association) {
            if (err) throw err;
            console.log("CREATION SUCESS");
          });
        });
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      相关资源
      最近更新 更多