创建种子文件以涉及DataTypes.JSON时出错

时间:2019-03-13 18:58:18

标签: javascript sql node.js sequelize.js psql

我正在为我的Node.Js / PSQL项目的ORM使用Sequalize。我正在创建种子文件以预填充数据库;但是,当我运行种子文件时,出现与以下相关信息之一的字段相关的错误。将JSON对象与

一起使用似乎存在问题

错误

== 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 个答案:

答案 0 :(得分:1)

由于queryInterface有点低,您必须指定要插入json,例如:

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

您可以通过up函数作为第二个参数访问Sequelize对象。

此外,您可以使用示例模型中的create方法来创建记录,而无需任何其他信息,例如:

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

其中示例是您定义的续集模型的实例

答案 1 :(得分:1)

Sequelize CLI有一个与JSON类型有关的问题。我有同样的问题,并在sequelize-cli的github上找到了解决方案。如果找到线程,则将更新源。您需要做的是使用use_coupon,因为它不会那样接受对象。

JSON.stringify()