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

2024-01-04

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

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

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

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

Code:

路线/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: "[email protected] /cdn-cgi/l/email-protection"
    });
    console.log(tEmail);

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

module.exports = router;

OR

/* 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: "[email protected] /cdn-cgi/l/email-protection"
        }).then(function(){
            tIndividual.addEmail(tEmail).then(function(){
                console.log("Success");
            });
        })
    });

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

module.exports = router;

模型/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() or .create()或其他返回 Promise 的方法,您应该调用.then()就那个承诺。当它解析时——也就是说,当对象被保存/创建/其他东西时——你的then函数将被调用,并将接收保存/创建的对象作为参数。

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

models.Individual.create({
  name: "Test"
}).then(function(createdIndividual) { // note the argument
  models.Email.create({
    address: "[email protected] /cdn-cgi/l/email-protection"
  }).then(function(createdEmail) { // note the argument
    createdIndividual.addEmail(createdEmail)
      .then(function(addedEmail) { // note th-- well you get the idea :)
        console.log("Success");
      });
  })
});

上面的代码缺少一些重要的东西,比如return承诺更好的链接和错误处理,但这只是一个开始。我会推荐蓝鸟的文档 https://github.com/petkaantonov/bluebird关于此事(这是 Sequelize 使用的 Promise 库,但还有其他几个)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 使用javascript滚动滚动条或鼠标滚轮后触发事件

    我想知道是否可以触发事件after使用滚动条或鼠标滚轮 或在触摸设备上滑动 时滚动页面 基本上 我想检测用户何时停止滚动 以便我可以进行 AJAX 加载 而不是在滚动时加载 看起来jQuery s scroll 每次用户滚动时都会触发 并且
  • 网络上的等角柱状图

    我计划为游戏的标记 图钉 构建在线地图 但我无法设置标记的正确纬度 原始地图是一个2048 2048px 的正方形 然后我得到了标记 数千个 地图坐标使用 0 到 100 之间的 x y 表示法设置 0 0 是top left角和100 1
  • 如何正确地将节点从引用传递到上下文?

    我正在尝试将节点从引用传递到上下文 但是因为我在第一次渲染后没有重新渲染 所以传递的节 点是null 我考虑了两种变体 但我认为它们不是最好的 To pass ref代替ref current 但在用例中 我将被迫使用类似的东西contex
  • React Native 无法访问 Cloud Firestore 后端

    我之前使用的是 firebase 实时数据库 但现在想切换到 Cloud Firestore 但即使经过身份验证 也会收到以下错误 我目前正在使用 Android Simulator 尝试禁用我的实时数据库 但找不到解决方案 Firebas
  • 使用 babel env 预设时,展开运算符出现语法错误

    我正在努力 现代化 meern io 入门样板 https github com Hashnode mern starter通过替换巴别塔es2015 and stage 0预设为env 然而 似乎env预设无法识别以下片段client m
  • 解释一下这个令人困惑的 dojo 教程声明语法

    我正在阅读使用的语法道场的声明 http dojotoolkit org documentation tutorials 1 8 declare 用于班级创建 描述很混乱 The declare function is defined in
  • 是否有任何理由使用 axios 而不是 ES6 fetch [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 研究了 axios 和 ES6 fetch 的文档 我发现两者非常相似 并且都受到 ajax 及其简写的强烈影响 axios 的主要优点是浏览器
  • 带有node-gyp的node.js应用程序无法在azure网站上部署

    我已经建立了一个 Azure 网站 并且正在尝试使用依赖于 node gyp 的示例应用程序 我得到这个 emote gt email protected cdn cgi l email protection install C DWASF
  • 指定 HTML5 输入类型 = 日期的值输出?

    我想将本机日期选择器添加到我的应用程序中 该应用程序当前使用遗留的本地系统 日期输入支持尚未广泛普及 但如果我可以基于兼容性提供这两种实现 那就太理想了 有没有办法指定 HTML 日期选择器给出的值的输出 歌剧的默认设置是yyyy mm d
  • 为什么Promise中的代码会同步执行? [复制]

    这个问题在这里已经有答案了 在我的项目中 我有一个很长时间运行的操作 所以我决定将其放入Promise因为我认为这样我就可以在里面的代码继续执行其他操作Promise正在跑步 调试的时候发现外面的代码Promise仅当里面的代码执行Prom
  • 如何在单击按钮时清除反应挂钩中的间隔

    我正在用反应钩子构建一个简单的计时器 我有两个按钮启动和重置 当我单击开始按钮时 handleStart 函数工作正常 计时器启动 但我不知道如何在单击重置按钮时重置计时器 这是我的代码 const App gt const timer s
  • 如何使用 github 托管外部 CSS 文件?

    我将 css 上传到 github 然后转到网站上的文件并单击 raw 选项 我尝试将其添加到网页中 但 chrome 给出以下错误 资源解释为样式表 但使用 MIME 类型 text plain 进行传输 https raw github
  • 在给定索引上将字符串分成两部分并返回两部分

    我有一个字符串 需要在给定索引上拆分 然后返回两个部分 并用逗号分隔 例如 string 8211 8 211 98700 98 700 因此 我需要能够在任何给定索引上拆分字符串 然后返回字符串的两半 内置方法似乎执行分割 但只返回分割的
  • 为什么这个递归函数返回未定义?

    我正在尝试编写一个使用递归组合两个字符串的函数 我的代码如下 但我不知道为什么该函数返回未定义 特别是当我在基本情况下使用 console log 时 它不会打印未定义而是打印正确的值 var str3 function merge str
  • 在 Express.js 中使用相同的响应对象发送多个响应(res.json)

    res json Object assign cart generateArray res json JSON stringify cart totalPrice 我如何发送发送多个响应 因为我的代码不起作用 谢谢 您不能发送多个回复 您发
  • 为什么 console.log() polyfill 不使用 Function.apply()?

    我一直在看一些流行的console log 包装 填充 保罗 爱尔兰的 http paulirish com 2009 log a lightweight wrapper for consolelog 本阿尔曼的 http benalman
  • Firebase 身份验证和实时应用程序数据库如何保护自身安全?

    从一般开发的角度来看 我很好奇如何保护在线资源的访问 我们使用以下 Firebase 配置参数初始化 Web 应用程序 apikey authdomain projectid databaseurl messagesenderid 服务器如
  • eventSources 到事件 Json,完整日历

    我正在尝试从 eventSources 获取 json 调用到我的事件 我在 eventSources 中返回的 json 是 title Title Test start 1305841052 当我将此字符串传递到事件中时 它会正确显示日
  • 加载 Angular 库时,IE9 和 IE10 中出现 Angular JS“SCRIPT5007:预期对象”错误

    我正在开发一个 AngularJS 应用程序 该应用程序应在 Firefox IE 9 和 IE 10 上运行 我使用最新版本的 angularjs 库 现在是 1 3 15 服务器端是在JavaEE平台上用Java编写的 服务器运行在Gl
  • HTML5 地理定位 - 在 iOS 上无法始终工作

    目前正在使用 HTML5 地理定位 我已经在所有网络浏览器上测试了它 它似乎工作正常 然而 当我在 iPad 上测试地理定位时 它在 iPad mini 上始终有效 但当我将其放在更大的 iPad iPad 2 上时 位置似乎并不总是有效

随机推荐

  • 自定义列的 ExecuteStoreQuery

    我正在尝试运行自定义查询并且正在使用实体框架 我尝试了这个 string query SELECT dm DistrictName sm SchoolName u UserId u FirstName u LastName sa Stude
  • 用于识别 2D 特征的图像处理

    我创建了一个 iPhone 应用程序 它可以扫描一张方格纸的图像 然后告诉我哪些方块已被涂黑 哪些方块是空白的 我通过从左到右扫描并使用方格纸的线条作为指导来完成此操作 当我遇到方格纸线时 我开始寻找黑色 直到再次碰到方格纸线 然后 我不再
  • 随机数生成器的实现[重复]

    这个问题在这里已经有答案了 可能的重复 随机数生成器如何工作 https stackoverflow com questions 1716308 how does a random number generator work 我正在寻找 C
  • NodeJS:与 PHP 集成

    我听说 Node JS 非常适合制作实时聊天应用程序 我想在我的网站上实现聊天 现在我只有设计 所以我现在必须编写后端代码 但是当我使用时socket io express它并没有像它应该的那样工作 代码来自server js var ap
  • 通过 http 加载数据之前 angular2 kendo ui 网格的 busyindicator

    我正在使用 angular2 kendo ui 网格并通过 http 调用将数据绑定到网格 在http调用返回数据之前 我需要显示忙碌指示器 而不显示网格标题 直到分配数据 如何实现此目的 谢谢 拉古斯 我通过在 HTML 模板中声明以下内
  • 创建静态资源字典

    我创建了一个资源字典 希望将其与多个用户控件 xaml 文件合并 我只想创建此资源字典的一个实例 知道如何做到这一点吗 注意 合并应该仅通过 xaml 进行 而不是通过代码进行 感谢和问候 维沙尔 这个怎么样 class Dictionar
  • 在 JavaFX 的 FXML 文件中指定 ResourceBundle

    可以设置一个ResourceBundle在 Java 类中使用下面的代码 FXMLLoader loader new FXMLLoader getClass getResource my view fxml loader setResour
  • 如何刷新我的gridView?

    我有一个ListView 当我单击列表视图行的按钮时 将在列表中创建一个按钮main xml 我有onclicklistener自定义 listView 适配器中的按钮 我正在 sqlite 中保存该按钮的点击 并通过该 sqlite 我正
  • Java中两个字符串的交集

    需要一个 Java 函数来查找两个字符串的交集 即字符串共有的字符 例子 String s1 new String Sychelless String s2 new String Sydney Using HashSet
  • CakePHP 3.0 - 更改密码时将数据库密码与旧密码进行比较

    我正在开发 CakePHP 3 0 我想将数据库密码与 更改密码 功能中表单中输入的旧密码进行比较 但我无法这样做 因为密码经过哈希处理 即使我们使用相同的密码 哈希密码每次都不同 请帮助我 提前致谢 近战 我会在您的 UsersTable
  • log4j:WARN 无法识别的元素滚动策略

    当我的应用程序启动时 我在日志中收到此警告 log4j WARN Unrecognized element rollingPolicy 尝试向 Google 寻求答案 但添加 apache log4j extras 1 1 jar 并没有帮
  • 请输入提交消息来解释为什么需要进行此合并,特别是如果它将更新的上游合并到主题分支中

    我正在使用 Git 我从远程仓库拉取并收到一条错误消息 请输入提交消息来解释为什么需要合并 特别是如果它将更新的上游合并到主题分支中 I try to type a message and press Enter but nothing h
  • 如何在 xamarin 表单中使用 wikiitude 插件?

    我正在使用 Xamarin 开发跨平台 AR 应用程序 我正在使用 Wikitude 即时跟踪 我能够启动 Wikitude 活动并能够运行即时跟踪 现在我想在跟踪时捕获高分辨率图像 我正在尝试构建插件来获取帧 然后将其转换为图像流 她是我
  • fread 错误“意外的字符结尾字段”

    请你帮助我好吗 我正在尝试加载大型 TSV 文件 4 百万行 并用于该 fread 速度惊人 问题是 当到达某一行时 所有程序都会崩溃 来自 verbose 的最后一条消息是 将数据行 2220004 上的第 12 列从 INT64 转换为
  • 如何使 Qt 5.9.1 附带的 QtLinguist 工作?

    Goal 使用以下命令生成 更新 Qt 小部件应用程序的 ts 文件lupdate Setup Windows 7 Pro 64 也在 Windows 10 家庭版上尝试过 适用于 msvc2017 64 位的 Qt 5 9 1 Prebu
  • 如何使用 System.DirectoryServices.ActiveDirectory.Domain 类获取域别名

    我们有一个完整的域名 例如长域名 com 该域名已替换为别名short 可以使用以下命令检索此别名netapi32 dll 像这样 DllImport Netapi32 dll static extern int NetApiBufferF
  • 确定 iOS 7 Safari 用户代理的最佳方法是什么?

    我遇到了仅在 iOS 7 版本的 Safari 中存在的样式问题 我无法确定如何通过 CSS 媒体查询检测用户是否在该设备上 或者 iOS 7 设备的确切用户代理是什么 有什么帮助吗 你试一试 navigator userAgent mat
  • 如何在同一页面中多次使用 AngularJS 2 组件?

    使用选择器声明组件后 some comp using
  • 如何替换字符串中的标记?

    I have a json object const item fooUrl www google com fooDomain www yahoo com 和一个输入字符串foo ENV fooDomain bar 我想更换 ENV foo
  • Node.js / Sequelize.js / Express.js - 如何插入多对多关联? (同步/异步?)

    我有两个模型 个人 电子邮件 并尝试使用 Sequelize 命令插入到创建的 Individual Email 表中 当 Sequelize 创建所需的表时 当尝试向该表添加 获取 设置该表时 它会返回以下错误 对象 object Pro