Крючки при посеве предметов - PullRequest
0 голосов
/ 22 сентября 2018

В коде моей модели я шифрую пароль пользователя с помощью хука beforeCreate.

В сеялке я создаю 10 пользователей с queryInterface.bulkInsert.

.понял это, крючки обходятся при использовании bulkInsert.

Как можно заполнить базу данных 10 пользователями И использовать хуки, подобные упомянутому?

Файл: seeders / 20180917155607-users.js

import faker from 'faker'
import lodash from 'lodash'

export default {
  up: (queryInterface, Sequelize) => {
    const res = lodash.times(10, () => ({
      email: faker.internet.email(),
      password: 'Password',
      createdAt: new Date(),
      updatedAt: new Date()
    }))
    return queryInterface.bulkInsert('users', res, {})
  },
  down: (queryInterface, Sequelize) => {
    // do your stuff
  }
}

Файл: модели/user.js

import bcrypt from 'bcrypt'

export default (sequelize, DataTypes) => {
  const User = sequelize.define('user', {
    email: {
      type: DataTypes.STRING,
      unique: true
    },
    password: DataTypes.STRING
  })
  User.beforeCreate(async user => {
    user.password = await user.generatePasswordHash()
  })

  User.prototype.generatePasswordHash = async function() {
    const saltRounds = 10
    return await bcrypt.hash(this.password, saltRounds)
  }
  return User
}

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

Вы можете выбрать: 1. методы queryInterface, которые не используют модель, следовательно, никаких хуков.bulkInsert () - это метод queryInterface.2. методы модели bulkCreate - это метод модели, который запускает хук beforeBulkCreate.Если вы передадите опцию IndividualHooks: true, он запустит хуки beforeBulkCreate и beforeCreate.3. В документах говорится, что bulkInsert принимает тот же параметр, что и bulkCreate, который включает индивидуальные крючки и транзакции.Анализ кода для model.js показывает, что на самом деле bulkCreate работает, возвращая вызов builkInsert, поэтому он должен работать.Я пока не смог этого достичь.

0 голосов
/ 22 сентября 2018

Для запуска хуков с bulkInsert() / bulkCreate() необходимо передать параметр individualHooks (включая validate для запуска проверок).

queryInterface.bulkInsert('users', res, {
  validate: true, 
  individualHooks: true,
});
...