Javascript Sequelize.js node.js多对多关联

Javascript Sequelize.js node.js多对多关联,javascript,node.js,postgresql,sequelize.js,Javascript,Node.js,Postgresql,Sequelize.js,我正在使用sequelize node.js模块在Postgres sql中形成模式 我有以下两个项目模式和我的用户 计划 我的用户 我一直在努力建立一种多对多的关系。当我运行应用程序时,将创建第三个表项目 我有以下代码 models.myusers.create({ description:"newuser" }).success(function(user) { var project1; var project2;

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

我有以下两个项目模式和我的用户

计划

我的用户

我一直在努力建立一种多对多的关系。当我运行应用程序时,将创建第三个表项目

我有以下代码

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/有许多双链接。js:151 外国人识别器]=targetKeys.length==1?未关联的对象[targetKey] ^ TypeError:无法读取未定义的属性“id” at/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/有许多双链接。js:151:88 at Array.map native 在module.exports.HasManyDoubleLinked.injectSetter/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/中有许多双链接。js:147:38 在instance.anonymous function.success.proxy.events/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/中有许多。js:317:39 在EventEmitter.emit events.js:95:17 在module.exports.CustomEventEmitter.emit/home/hassan/Desktop/node/node_modules/sequelize/lib/emitters/customevent emitter.js:107:33 在null处。/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/有许多双链接。js:74:63 在EventEmitter.emit events.js:95:17 在module.exports.CustomEventEmitter.emit/home/hassan/Desktop/node/node_modules/sequelize/lib/emitters/customevent 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]应用程序崩溃-正在等待文件更改,然后再启动


任何人都能告诉我哪里出了问题。

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");
      });
    });
  });
});
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");
      });
    });
  });
});
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");
      });
    });
  });
});