Javascript Sequelize.js node.js多对多关联
我正在使用sequelize node.js模块在Postgres sql中形成模式 我有以下两个项目模式和我的用户 计划 我的用户 我一直在努力建立一种多对多的关系。当我运行应用程序时,将创建第三个表项目 我有以下代码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;
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");
});
});
});
});