Элемент ValidationError в журнале

#javascript #mysql #sequelize.js

#javascript #mysql #sequelize.js

Вопрос:

 const student  = db.define('student',{ //This is a model 
    name: {
        type: datatype.STRING(40),
        allowNull: false
    },
    age:{
            type: datatype.INTEGER(2),
            allowNull: false,
            defaultValue: -1
        }
    
})

const task = async()=>{
    try{
        await db.sync()
        .then(()=> console.log("Connection Established"))
        .catch((err)=> console.log(err))

        //Insert a Student
        for(let i=0;i<30;i  ){
            await student.create({
                name: (['Tom','Dick','Van Dijk','Muller','Virat','Allison'])[parseInt(Math.random()*10)],
                age: 10 * parseInt(Math.random()*10)
            })
        }
        
    }catch(e){
        console.error(e);
    }
}

task();

 

Для выполнения этого я получаю ошибку, подобную этой:
ValidationErrorItem {
сообщение: ‘student.name не может быть null’,
тип: ‘NotNull Нарушение’,
путь: ‘имя’,
значение: null,
источник: ‘ЯДРО’,
экземпляр: [студент],
validatorKey: ‘is_null’,
validatorName: null,
validatorArgs: []
}

student — это таблица, которая является моделью, а task — это функция, которая вставляет в нее элементы.

Ответ №1:

Выходной номер parseInt(Math.random()*10) — от 0 до <=9 . Но длина ['Tom','Dick','Van Dijk','Muller','Virat','Allison'] равна 6 . Таким образом, может быть undefined значение, если индекс больше 5 . name Поле в схеме sequelize имеет allowNull: false ограничение. undefined Значение нарушает NOT NULL ограничение. Вот почему вы получили ошибку проверки.

Вы должны изменить его следующим образом:

 parseInt(Math.random() * 6)
 

Он выдаст вам число от 0 до <=5 .