Node.js 将值指定给对象后缺少函数
我正在使用node、express和typeorm开发RESTAPI。 我有一个用户实体:Node.js 将值指定给对象后缺少函数,node.js,typeorm,Node.js,Typeorm,我正在使用node、express和typeorm开发RESTAPI。 我有一个用户实体: import { Entity, PrimaryGeneratedColumn, Column, Unique, CreateDateColumn, UpdateDateColumn } from "typeorm"; import bcrypt from "bcryptjs"; export enum userRole { ADMIN = "ADMIN", USER =
import {
Entity,
PrimaryGeneratedColumn,
Column,
Unique,
CreateDateColumn,
UpdateDateColumn
} from "typeorm";
import bcrypt from "bcryptjs";
export enum userRole {
ADMIN = "ADMIN",
USER = "USER"
}
@Entity()
@Unique(["username"])
export class User[![enter image description here][1]][1] {
@PrimaryGeneratedColumn()
id: number;
@Column({ type: "varchar", length: 50 })
username: string;
@Column({ type: "varchar", length: 255 })
password: string;
@Column({ type: "enum", enum: userRole })
role: string;
@CreateDateColumn({ name: "created_at" })
createdAt: Date;
@UpdateDateColumn({ name: "updated_at" })
updatedAt: Date;
hashPassword() {
this.password = bcrypt.hashSync(this.password, 8);
}
checkIfUnencryptedPasswordIsValid(unencryptedPassword: string) {
return bcrypt.compareSync(unencryptedPassword, this.password);
}
}
以及用于保存用户的存储库功能:
export const register = async userData => {
let user = new User();
// THIS CODE WORKS AS EXPECTED
// BUT IS TEDIOUS TO ASSIGN EACH PROPERTY ONE BY ONE
// user.username = userData.username;
// user.password = userData.password;
// user.role = userData.role;
// I WAS TRYING WITH SPREAD, BUT NO LUCK
user = { ...userData };
// BECAUSE, THEN IT SAYS THAT THE user DOESN'T HAVE
// THE hashPassword METHOD
user.hashPassword();
const userRepository = getRepository(User);
await userRepository.save(user);
};
所以,首先我从用户实体创建一个用户,设置新值,然后存储在数据库中
但是,在使用spread运算符避免逐个设置每个属性后,新用户没有开始时使用的方法(hashPassword、checkIfUnencryptedPasswordIsValid)
如何解决这个问题?我找到了一个解决方法。
在用户实体中,我添加了一个构造函数来迭代来自服务的属性
constructor(params?: User) {
for (const key in params) {
if (params.hasOwnProperty(key)) {
this[key] = params[key];
}
}
}
如果您只想实例化一个空的用户对象,这些选项也可以是可选的
在userRepository中,注册函数如下所示:
export const register = async (userData: User) => {
const user = new User(userData);
await user.hashPassword();
const userRepository = getRepository(User);
await userRepository.save(user);
};
现在,方法和属性都可用,代码简单明了