2014-04-24 3 views
0

에 내가 사용하고 sequelize는Sequelize.js Node.js를 많은 많은 관계

내가 프로젝트 내 사용자의 두 스키마 다음 적이 포스트 그레스 SQL에서 스키마를 형성하기 위해 모듈을 Node.js를.

프로젝트

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

myusers

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: Cannot read property 'id' of undefined at /home/hassan/Desktop/node/node_modules/sequelize/lib/associations/has-many-double-linked.js:151:88 at Array.map (native) at module.exports.HasManyDoubleLinked.injectSetter (/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/has-many-double-linked.js:147:38) at instance.(anonymous function).success.proxy.events (/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/has-many.js:317:39) at EventEmitter.emit (events.js:95:17) at module.exports.CustomEventEmitter.emit (/home/hassan/Desktop/node/node_modules/sequelize/lib/emitters/custom-event-emitter.js:107:33) at null. (/home/hassan/Desktop/node/node_modules/sequelize/lib/associations/has-many-double-linked.js:74:63) at EventEmitter.emit (events.js:95:17) at module.exports.CustomEventEmitter.emit (/home/hassan/Desktop/node/node_modules/sequelize/lib/emitters/custom-event-emitter.js:107:33) at emitter.query.success.error.proxy.events (/home/hassan/Desktop/node/node_modules/sequelize/lib/query-interface.js:890:19) 24 Apr 10:31:47 - [nodemon] app crashed - waiting for file changes before starting...

어떤 몸이 말할 수있는 화면에 다음과 같은 오류 줘.

답변

0

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