node.js - beforeBulkDestroy 找不到要更改的模型属性
问题描述
我正在尝试beforeBulkDestory
在用户删除上使用 Sequelize 挂钩,该挂钩将在更新记录之前将列布尔值切换为添加deleted
时间戳。但是,当我 console.log 函数参数时,它提供了一个选项列表,而不是我可以更新以记录焦点的模型对象。我是以错误的方式接近这个吗?这是应该使用模型实例设置的东西吗?true
deleted_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;
};
解决方案
推荐阅读
- json - 如何从 Flutter 中的 Dio 请求中获取所有字段
- amazon-web-services - 在新的集群 crd 问题中部署 peromethues
- google-sheets - 如果两个单元格匹配/重复,则返回并从第二个计算值
- c# - 将“allure-results”目录设置为当前工作目录
- android - 无法将本机打包为 apk 应用程序:validateSigningRelease 应用程序:transformNativeLibsWithStripDebugSymbolForRelease 错误
- python-3.x - Python用“=”调用模拟未调用结果
- javascript - 在 axios 操作上保持令牌更新
- unity3d - Trailrenderer 只能是黑色的
- angular - 在 Angular 中使用 async 和 await 时,如何从 PUT 请求中返回响应?
- python-3.x - 将外部文件挂载到 Docker 容器中