首页 > 解决方案 > beforeBulkDestroy 找不到要更改的模型属性

问题描述

我正在尝试beforeBulkDestory在用户删除上使用 Sequelize 挂钩,该挂钩将在更新记录之前将列布尔值切换为添加deleted时间戳。但是,当我 console.log 函数参数时,它提供了一个选项列表,而不是我可以更新以记录焦点的模型对象。我是以错误的方式接近这个吗?这是应该使用模型实例设置的东西吗?truedeleted_at

API 调用:

import db from '../../../models/index';
const User = db.users;

export default (req, res) => {

    const {
        query: { id },
    } = req

    console.log(User)
  
    if (req.method === 'DELETE') {
        User.destroy({
            where: {
                id: id
            }
        }).then(data => {
            res.json({
            message: 'Account successfully deleted!'
            })
        })
    } else {
        const GET = User.findOne({
            where: {
                id: id
            }
        });
        GET.then(data => {
        res.json(data)
        })
    }
  
}

参数值(beforeBulkDestroy、afterBulkDestroy):

beforeBulkDestroy
{
  where: { id: '5bff3820-3910-44f0-9ec1-e68263c0f61f' },
  hooks: true,
  individualHooks: false,
  force: false,
  cascade: false,
  restartIdentity: false,
  type: 'BULKDELETE',
  model: users
}
afterDestroy
{
  where: { id: '5bff3820-3910-44f0-9ec1-e68263c0f61f' },
  hooks: true,
  individualHooks: true,
  force: false,
  cascade: false,
  restartIdentity: false,
  type: 'BULKUPDATE',
  model: users
}

模型(users.js):

'use strict';
const Sequelize = require('sequelize');
const { Model } = require('sequelize');
const bcrypt = require("bcrypt");

module.exports = (sequelize, DataTypes) => {
  class users extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here
    }
  };

  users.init({
    id: {
      type: DataTypes.UUID,
      defaultValue: Sequelize.UUIDV4,
      primaryKey: true
    },
    first_name: DataTypes.STRING,
    last_name: DataTypes.STRING,
    password: {
      type: DataTypes.STRING
    },
    email: DataTypes.STRING,
    active: {
      type: DataTypes.BOOLEAN,
      defaultValue: true
    },
    deleted: {
      type: DataTypes.BOOLEAN,
      defaultValue: false
    }
  }, {
    hooks: {
      beforeDestroy: (user, options) => {
        console.log("beforeDestroy")
        console.log(user)
        console.log(options)
        user.deleted = true
      }
    },
    sequelize,
    freezeTableName: true,
    modelName: 'users',
    omitNull: true,
    paranoid: true,
    underscored: true,
    createdAt: 'created_at',
    updatedAt: 'updated_at',
    deletedAt: 'deleted_at',
    hooks: {
      beforeCreate: async function(user){
        console.log("beforeCreate")
        console.log(user)
        const salt = await bcrypt.genSalt(12);
        user.password = await bcrypt.hash(user.password, salt);
        console.log(user.password)
      },
      beforeBulkDestroy: async function(user){
        console.log("beforeBulkDestroy")
        console.log(user)
      },
      afterBulkDestroy: async function(user){
        console.log("afterDestroy")
        console.log(user)
      }
    }
  });

  users.prototype.validPassword = async function(password) {
    console.log("validatePassword")
    console.log(password)
    return await bcrypt.compare(password, this.password);
  }

  return users;
};

标签: node.jssequelize.js

解决方案


推荐阅读