javascript - 模型 A 与模型 B Sequelize 错误无关

标签 javascript mysql node.js express sequelize.js

我遇到以下问题, 我有 2 个型号: 客户端

module.exports = (sequelize, DataTypes) => {
const Client = sequelize.define('Client', {      
  first_name: DataTypes.STRING,
  last_name: DataTypes.STRING,
  phone: DataTypes.STRING,
  mobile_phone: DataTypes.STRING,
  email: DataTypes.STRING,                             
});

//creating association Client with Gender
Client.associate = function (models) {
  Client.hasOne(models.Gender, {     
       //     
  });
};


return Client; }

和性别:

module.exports = (sequelize, DataTypes) => {
const Gender = sequelize.define('Gender', {      
  name: DataTypes.STRING,                             
});

//creating association Gender with Employee
Gender.associate = function (models) {
  models.Gender.hasMany(models.Employee, {   
    //                         
  });
};

//creating association Gender with Client
Gender.associate = function (models) {
  models.Gender.belongsTo(models.Client, { 
    foreignKey: 'gender_id'                   
  });
};

return Gender; }

我的客户端 Controller :

const { Client, Gender } = require('../models');

class ClientController {

  // Apresenta todos os resgistros do determinado Model
  async index (req, res) {
      const clients = await Client.findAll({});

      return res.status(200).json({
          status: 'ok',
          clients
      });
  }

  // Apresenta os atributos setados de um resgistro específico
  async show (req, res) {
      const client = await Client.findAll({
          attributes: ['id', 'first_name', 'last_name', 'phone', 'mobile_phone', 'email'],
          where: {
              id: req.params.id
          },
          include: [{
              model: Gender,                 
              attributes: [],

          }],
      });

      return res.status(200).json({
          status: 'ok',
          client
      });
  }

  // Cria e salva um resgistro do Model especificado
  async store (req, res) {
      const client = await Client.create(req.body);

      return res.status(201).json({
          status: 'created',
          client
      });
  }

  // Edita e salva um resgistro do Model especificado
  async update (req, res) {
      const { first_name, last_name, phone, mobile_phone, email } = req.body;

      const client = await Client.update({
          first_name: first_name,
          last_name: last_name,
          phone: phone,
          mobile_phone: mobile_phone,
          email: email

      }, {
          where: {
              id: req.params.id
          }
      });

      return res.status(200).json({
          status: 'updated',
          client
      });
  }

  // Exclui um resgistro do Model especificado
  async destroy (req, res) {
      await Client.destroy({
          where: {
              id: req.params.id
          }
      });

      return res.status(204).json({
          status: 'removed'
      });
  }
}

module.exports = new ClientController()

但是我得到了以下信息:

node ./bin/www

api:server 监听端口 3000 +0ms ( Node :16328)UnhandledPromiseRejectionWarning:SequelizeEagerLoadingError:性别未与客户端关联! 在 Function._getIncludedAssociation (C:\SISTEMA-REACT-EXPRESS\api\node_modules\sequelize\lib\model.js:715:13) 在 Function._validateIncludedElement (C:\SISTEMA-REACT-EXPRESS\api\node_modules\sequelize\lib\model.js:619:53) 在 options.include.options.include.map.include (C:\SISTEMA-REACT-EXPRESS\api\node_modules\sequelize\lib\model.js:516:37) 在Array.map() 在 Function._validateIncludedElements (C:\SISTEMA-REACT-EXPRESS\api\node_modules\sequelize\lib\model.js:511:39) 在 Promise.try.then.then (C:\SISTEMA-REACT-EXPRESS\api\node_modules\sequelize\lib\model.js:1726:14) 在 tryCatcher (C:\SISTEMA-REACT-EXPRESS\api\node_modules\bluebird\js\release\util.js:16:23) 在 Promise._settlePromiseFromHandler (C:\SISTEMA-REACT-EXPRESS\api\node_modules\bluebird\js\release\promise.js:547:31) 在 Promise._settlePromise (C:\SISTEMA-REACT-EXPRESS\api\node_modules\bluebird\js\release\promise.js:604:18) 在 Promise._settlePromise0 (C:\SISTEMA-REACT-EXPRESS\api\node_modules\bluebird\js\release\promise.js:649:10) 在 Promise._settlePromises (C:\SISTEMA-REACT-EXPRESS\api\node_modules\bluebird\js\release\promise.js:729:18) 在 _drainQueueStep (C:\SISTEMA-REACT-EXPRESS\api\node_modules\bluebird\js\release\async.js:93:12) 在 _drainQueue (C:\SISTEMA-REACT-EXPRESS\api\node_modules\bluebird\js\release\async.js:86:9) 在 Async._drainQueues (C:\SISTEMA-REACT-EXPRESS\api\node_modules\bluebird\js\release\async.js:102:5) 在 Immediate.Async.drainQueues [as _onImmediate] (C:\SISTEMA-REACT-EXPRESS\api\node_modules\bluebird\js\release\async.js:15:14) 在 runCallback (timers.js:705:18) 在 tryOnImmediate (timers.js:676:5) 在 processImmediate (timers.js:658:5) ( Node :16328)UnhandledPromiseRejectionWarning:未处理的 promise 拒绝。此错误的根源是在没有 catch block 的情况下抛出异步函数内部,或者拒绝未使用 .catch() 处理的 Promise。 (拒绝 ID:1) ( Node :16328)[DEP0018] DeprecationWarning:未处理的 promise 拒绝已被弃用。将来,未处理的 Promise 拒绝将会以非零退出代码终止 Node.js 进程。

观察:在与数据透视表的 n:m 关系中,一切正常,有人可以帮助我吗?

最佳答案

您正在用第二个关联覆盖第一个关联:

//creating association Gender with Employee
Gender.associate = function (models) {
  models.Gender.hasMany(models.Employee, {   
    //                         
  });
};

//creating association Gender with Client
Gender.associate = function (models) {
  models.Gender.belongsTo(models.Client, { 
    foreignKey: 'gender_id'                   
  });
};

只需将它们合并为一个:

//creating Gender associations
Gender.associate = function (models) {
  models.Gender.hasMany(models.Employee, {   
  models.Gender.belongsTo(models.Client, { 
    foreignKey: 'gender_id'                   
  });
};

关于javascript - 模型 A 与模型 B Sequelize 错误无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60231276/

相关文章:

javascript - 手工编写的 Canvas 性能与引擎编写的 Canvas 性能

mysql - Codeception DB模块异常

javascript - EJS在2个页面之间共享数据

node.js - 在 jest 拆解中杀死一个 Node.js 服务器(在 jest 的安装钩子(Hook)中启动)

javascript - Select2 选项未正确更新

Javascript/jQuery : Reordering divs according to data-attribute values

javascript - docker-compose 仅​​运行我的 mongodb 服务器但不运行我的 js 文件

php - 过滤器打开时如何更改变量

php - 关于使我的 WordPress 网站变慢的查询

node.js - 为什么 Gulp 随机失败并出现 ENOENT 错误(或)无法生成输出(或意外删除)?