Ошибка при создании начального файла для sequalize с участием DataTypes.JSON - PullRequest
0 голосов
/ 13 марта 2019

Я использую Sequalize для моего ORM для моего проекта Node.Js / PSQL. Я работаю над созданием начального файла для предварительного заполнения своей базы данных; однако, когда я запускаю начальный файл, я получаю ошибку, связанную с одним из полей с соответствующей информацией ниже. Кажется, есть проблема с использованием объекта JSON с

Error

== 20170308131757-examples: migrating =======
ERROR: Invalid value { example: 'mk@kWO5r' }

Определение

 const example = sequelize.define('example', {
    date: DataTypes.DATE   
    data: {
      type: DataTypes.JSON,
      allowNull: true
    },    
  }, {});

Файл семян

 up: function (queryInterface) {
    const examples = [];
    examples.push({
      date: new Date(),
      data: {
        data: dataFaker.string({ length: 8 })
      },
      createdAt: new Date(),
      updatedAt: new Date()
    });

    for(let i = 0; i < 20; i++) {
      testAlertLists.push({
        date: new Date(),
        data: {
          data: dataFaker.string({ length: 8 })
        },
        createdAt: new Date(),
        updatedAt: new Date()
      });
    }

    return queryInterface.bulkInsert('examples', examples, {});
  },

  down: function (queryInterface) {
    return queryInterface.bulkDelete('examples', null, {});
  }

Я сохранил соответствующие фрагменты кода, чтобы упростить вещи, поэтому есть дополнительные поля и другие аспекты, которые я могу добавить при необходимости, и если есть небольшие опечатки, не связанные с ошибкой, которая, вероятно, из-за упрощения вещей, и я могу исправить те, если найдены.

Кажется, проблема в том, что Sequalize не принимает объект JSON во вставке, но он определен как объект JSON как в коде, так и в самой таблице (я проверял). Я пытался создать Json несколькими разными способами, но за пределами этого я немного озадачен этой проблемой. Есть ли проблема с использованием объектов JSON с psql или Sequalize?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Sequelize CLI имеет проблему, связанную с типом JSON.У меня была такая же проблема, и я нашел решение на github sequelize-cli.Если я найду ветку, я обновлю источник.Вам нужно использовать JSON.stringify(), потому что он не примет объект как таковой.

examples.push({
  date: new Date(),
  data: JSON.stringify({
    data: dataFaker.string({ length: 8 })
  }),
  createdAt: new Date(),
  updatedAt: new Date()
});
1 голос
/ 13 марта 2019

Поскольку queryInterface немного низкоуровневый, вам нужно указать, что вы вставляете json, например:

return queryInterface.bulkInsert('examples', examples, { data: { type: new Sequelize.JSON() } });

Вы можете получить доступ к объекту Sequelize в качестве второго аргумента из функции up.

Кроме того, вы можете использовать метод create из вашей модели примера для создания записи без дополнительной информации, такой как:

example.create({
  date: new Date(),
        data: {
          data: dataFaker.string({ length: 8 })
        },
        createdAt: new Date(),
        updatedAt: new Date()
})

где example - это экземпляр вашей модели секвелирования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...