gpt4 book ai didi

sequelize.js - Sequelize Typescript @BeforeUpdate Hook 不起作用

转载 作者:行者123 更新时间:2023-12-03 22:16:53 30 4
gpt4 key购买 nike

我正在为我的无服务器 lambda 函数使用 Sequelize Typescript 模块。用户模型有两个钩子(Hook),beforecreate 和 beforeupdate。用户模型如下所示:

import { Table, Column, ForeignKey, BeforeCreate, BeforeUpdate, BelongsTo } from 'sequelize-typescript';
import { Role } from './role';
import bcrypt from 'bcrypt-nodejs';
import { BaseModel } from './base';
const saltRounds = 10;

@Table({
tableName: 'users'
})

export class User extends BaseModel {

@Column
firstName!: string;

@Column
lastName!: string;

@Column
password!: string;

@Column
email!: string;

@Column
isActive!: boolean;

@Column
companyId: string

@ForeignKey(() => Role)
@Column
roleId!: string;

@BelongsTo(() => Role)
role!: Role;

@BeforeCreate
@BeforeUpdate
static hashPassword(user: User) {
if (user.password) {
var salt = bcrypt.genSaltSync(saltRounds);
user.password = bcrypt.hashSync(user.password, salt);
}
}
}

现在,当我创建一个新用户时,模型对密码进行哈希处理并将哈希密码保存在表中,但是当我尝试更新用户的密码时,密码以纯文本形式保存。所以我猜@BeforeCreate 有效,而@BeforeUpdate 钩子(Hook)没有。

我什至尝试将两个钩子(Hook)分开并赋予它们自己的功能:
@BeforeCreate
static hashPasswordBeforeCreate(user: User) {
if (user.password) {
var salt = bcrypt.genSaltSync(saltRounds);
user.password = bcrypt.hashSync(user.password, salt);
}
}


@BeforeUpdate
static hashPasswordBeforeUpdate(user: User) {
if (user.password) {
var salt = bcrypt.genSaltSync(saltRounds);
user.password = bcrypt.hashSync(user.password, salt);
}
}

但是之前的更新还是不行。我究竟做错了什么?

最佳答案

我认为你必须添加

individualHooks: true


在这样的更新查询中 - users.update(data, {where: {id}, individualHooks: true});
然后,您可以像这个 user.dataValues 一样将数据访问到您的 @BeforeUpdate Hook 中。
例如。
@BeforeUpdate
static hashPasswordBeforeUpdate(user: User) {
user.dataValues.password = bcrypt.hashSync(user.dataValues.password, salt);
}
这种方法对我来说很好。

关于sequelize.js - Sequelize Typescript @BeforeUpdate Hook 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59101079/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com