Добавление данных в таблицу соединений

1

У меня две модели: "Контакт и сообщение", в которой есть модель подключения ContactMessage.

Contact.belongsToMany(models.Message, {
  through: 'ContactMessage'
})

Message.belongsToMany(models.Contact, {
  through: 'ContactMessage'
})

Я отправляю сообщение от отправителя получателю, и я хочу добавить идентификатор сообщения и идентификатор контактов в joinTable, но он не добавляется.

это то, что у меня есть:

sendSms(req, res) {
    return Contact
    .find( {
        where: {
          contact_phone: req.body.sender
        }
      } 
    )
    .then(sender => {
      if (sender) {
        let users = [sender]
        return Contact
          .find({
            where: {
              contact_phone: req.body.reciever
            }
          }).then(reciever => {
            users.push(reciever)
            return users
          })
      } else {
        console.log('${sender} does not exist')
      }
    }).then (users => {
      if (!users) {
        return res.status(404).send({
          message: 'Users Not Found',
        });
      }
      return Message.create({
        sms
      } = req.body)
      .then(message => {
        message.setContacts([users], {status: 'sent'})
        return res.status(200).send(message)
      })
      .catch((error) => res.status(400).send(error));
    })
    .catch((error) => res.status(400).send(error));
  }

Пожалуйста, что я делаю неправильно? И я получаю ошибку ниже, когда я пытаюсь запустить api

Unhandled rejection SequelizeDatabaseError: operator does not exist: character varying = integer
    at Query.formatError (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/sequelize/lib/dialects/postgres/query.js:363:16)
    at query.catch.err (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/sequelize/lib/dialects/postgres/query.js:86:18)
    at tryCatcher (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/promise.js:690:18)
    at _drainQueueStep (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/async.js:138:12)
    at _drainQueue (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/async.js:131:9)
    at Async._drainQueues (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/async.js:147:5)
    at Immediate.Async.drainQueues (/Users/andeladeveloper/Documents/projects/sms-app/node_modules/bluebird/js/release/async.js:17:14)
    at runCallback (timers.js:789:20)
    at tryOnImmediate (timers.js:751:5)
    at processImmediate [as _immediateCallback] (timers.js:722:5)
  • 0
    Вы должны сказать, какие библиотеки вы используете, (Sequelize ваш случай), не читая журнал ошибок
  • 0
    Можете ли вы сказать нам, какие типы первичных ключей на двух моделях Контакт и Сообщение?
Показать ещё 1 комментарий
Теги:
express
sequelize.js

1 ответ

1

Я допустил ошибку в файле миграции для ContactMessage Я использовал String в качестве типа данных вместо INTEGER.

теперь это выглядит так:

return queryInterface.createTable('ContactMessages', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      contact_id: {
        type: Sequelize.INTEGER,
        references: {
          model: 'Contacts',
          key: 'id'
        }
      },
      message_id: {
        type: Sequelize.INTEGER,
         references: {
           model: 'Messages',
           key: 'id'
         }
      },
      status: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню