【问题标题】:Validation error when seeding in Sequelize在 Sequelize 中播种时出现验证错误
【发布时间】:2020-06-13 02:51:57
【问题描述】:

我尝试使用大量数据在 Sequelize 中播种,但在播种时出现“验证错误”错误。请在下面查看我的代码。

"use strict";

const faker = require("faker");
const User = require("../models").User;

module.exports = {
  up: async (queryInterface, Sequelize) => {
    let products = [];
    let amount = 100;

    // 50 users
    let users = await User.findAll();
    let userCodes = users.map(user => user.code);
    // output ['x312scAD', 'F32SDcvrW', ...]

    function randomBetween(min, max) {
      return Math.floor(Math.random() * (max - min + 1) + min);
    }

    // image collections from Unsplash.com
    let imagesCollection = [1163637, 190727, 6780963, 1198107, 762960, 1353633, 3321491, 217461, 2203755];
    let imageWidth = 980;
    let imageHeight = 555;

    var uniqueNumbers = [];
    while (uniqueNumbers.length < amount) {
      var r = Math.floor(Math.random() * 1000) + 1;
      if (uniqueNumbers.indexOf(r) === -1) uniqueNumbers.push(r);
    }

    while (amount--) {
        let randomCollection = randomBetween(0, imagesCollection.length - 1);
        let randomThumbnail = `https://source.unsplash.com/collection/${imagesCollection[randomCollection]}/${imageWidth}x${imageHeight}/?sig=${uniqueNumbers[amount]}`;

        products.push({
          code: 'abc' + faker.random.number(),
          userCode: userCodes[randomBetween(1, userCodes.length-1)],
          title: faker.lorem.sentence(),
          subtitle: faker.lorem.sentence(),
          description: faker.lorem.paragraphs(),
          categoryId: randomBetween(1, 10),
          thumbnail: randomThumbnail,
          createdAt: new Date(),
          updatedAt: new Date()
        });
      }
      return await queryInterface.bulkInsert("products", products, {});
  }
};

PS:用户拥有很多产品

我认为这个原因是异步/等待,但我是这种类型的新手。请让我知道在这种情况下我的错在哪里。

谁能帮我以正确的方式播种?

这是我在 models.Product 中的产品规则

code: DataTypes.STRING(12),
userCode: DataTypes.STRING,
title: DataTypes.STRING,
subtitle: DataTypes.STRING,
description: DataTypes.TEXT,
categoryId: DataTypes.INTEGER,
thumbnail: DataTypes.STRING,
createdAt: DataTypes.Date,
updatedAt: DataTypes.Date

PS:我有时可以播种

【问题讨论】:

  • product 的验证规则是什么?
  • 在我的产品模型中。 Product.belongsTo(models.User, { targetKey: "code", foreignKey: "userCode", as: "user" });而在我的用户模型 User.hasMany(models.Product, { sourceKey: "code", foreignKey: "userCode", as: "products" });
  • 这就是所有的验证?列类型等怎么样?
  • 所以这是问题所在......当随机生成相同的数字时,它不允许您插入
  • 我解决了这个问题。这是因为唯一编号。非常感谢@YosefTukachinsky,你救了我的命!

标签: javascript node.js express sequelize.js faker


【解决方案1】:

我的错误是我违反了我的虚拟数据中的唯一电子邮件验证,一旦我更改它就会正常生成种子。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多