【发布时间】: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