gpt4 book ai didi

javascript - Node.js/Sequelize.js/Express.js - 如何插入多对多关联? (同步/异步?)

转载 作者:数据小太阳 更新时间:2023-10-29 04:34:48 25 4
gpt4 key购买 nike

我有两个模型(个人、电子邮件),我正在尝试使用 Sequelize 命令插入到创建的“Individual_Email”表中。当 Sequelize 正在创建所需的表时,它在尝试向该表添加/获取/设置该表时返回以下错误:“对象 [object Promise] 没有方法 'addEmail'”。我错过了什么?

Sequelize 文档说,如果模型是 User 和 Project,“这会将方法 getUsers、setUsers、addUsers 添加到 Project,并将 getProjects、setProjects 和 addProject 添加到 User。”

这让我相信(查看 promises)我可能误解了如何使用 Node.js 的异步特性。我已经尝试了插入的同步和异步版本,两者都返回了上面相同的消息。

Sequelize 文档:http://docs.sequelizejs.com/en/latest/docs/associations/

代码:

routes/index.js

var express = require('express');
var router = express.Router();
var models = require('../models');

/* GET home page. */
router.get('/', function(req, res, next) {
'use strict';

var tIndividual, tEmail;
tIndividual = models.Individual.create({
name: "Test"
});
tEmail = models.Email.create({
address: "test@gmail.com"
});
console.log(tEmail);

res.render('index', { title: 'Express' });
});

module.exports = router;

/* GET home page. */
router.get('/', function(req, res, next) {
'use strict';

var tIndividual, tEmail;
tIndividual = models.Individual.create({
name: "Test"
}).then(function(){
tEmail = models.Email.create({
address: "test@gmail.com"
}).then(function(){
tIndividual.addEmail(tEmail).then(function(){
console.log("Success");
});
})
});

res.render('index', { title: 'Express' });
});

module.exports = router;

models/index.js

db.Individual.hasMany(db.Email, {
as: 'Email',
through: 'Individual_Email'
});
db.Email.hasMany(db.Individual, {
as: 'Individual',
through: 'Individual_Email'
});

如何以最佳方式添加到表“Individual_Email”?我假设我需要同步进行以等待更新,但我愿意接受任何建议。谢谢!

最佳答案

当您调用 .save().create() 或其他返回 Promise 的方法时,您应该调用 .then() 在那个 promise 上。当它解析时——也就是说,当对象被保存/创建/其他东西时——你的 then 函数将被调用,并将保存/创建的对象作为参数接收。

所以你的第一次尝试可以重写为:

models.Individual.create({
name: "Test"
}).then(function(createdIndividual) { // note the argument
models.Email.create({
address: "test@gmail.com"
}).then(function(createdEmail) { // note the argument
createdIndividual.addEmail(createdEmail)
.then(function(addedEmail) { // note th-- well you get the idea :)
console.log("Success");
});
})
});

上面的代码缺少一些重要的东西,例如返回更好的链接和错误处理的 promise ,但这只是一个开始。我推荐 Bluebird's documentation关于此事(这是 Sequelize 使用的 Promise 库,但还有其他几个)

关于javascript - Node.js/Sequelize.js/Express.js - 如何插入多对多关联? (同步/异步?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28921074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com