nestJS에서 typeORM과 함께 백엔드를 공부하고있는데
User 정보를 업데이트 하는 과정에서 비밀번호를 암호와 해야 했기에
@BeforeUpdate()를 사용해주었는데 작동을 안하잖아..?
💡기존 코드
// user.entitiy.ts
@BeforeInsert()
@BeforeUpdate()
async hashPassword(): Promise<void> {
try {
this.password = await bcrypt.hash(this.password, 10);
} catch (error) {
console.log(error);
throw new InternalServerErrorException();
}
}
/******************************************************************/
// user.service.ts
async editProfile(
userId: number, { email, password }: EditProfileInput
): Promise<Users> {
return this.users.update(userId, { ...editProfileInput });
}
분명 나는 update() 함수를 호출했는데 왜 @BeforeUpdate가 호출되지않고
패스워드는 평서문으로 저장이 되고 있었다.
원인을 찾기위해 update 설명을 읽어보면,
"Does not check if entity exist in the database."
update의 경우에 우린 "query" 를 넘겨주고 있는것 뿐 entitiy는 체크하지 않는다!
따라서, 나는 update가 아닌 save를 사용해주기로 했다.
save() : If entity does not exist in the database then inserts, otherwise updates.
데이터가 존재하지 않는다면 insert, 있다면 update
💡수정된 코드
async editProfile(userId: number, { email, password }: EditProfileInput): Promise<Users> {
const user = await this.users.findOne(userId);
if (email) {
user.email = email;
}
if (password) {
user.password = password;
}
return this.users.save(user);
}
남겨 놓으면 좋은 정보인것 같아 오랜만에 메모해놓는다 :>
노드 백엔드 공부중인데 진짜 갸어렵다 🤯
'~ 2024.08' 카테고리의 다른 글
[React] 리액트 컴포넌트 테스트 환경 설정 (0) | 2022.06.28 |
---|---|
[NestJS] Task Scheduling (0) | 2022.05.22 |
20211102 리액트 CSS (0) | 2021.11.02 |
20211101 REACT REPORT (0) | 2021.11.01 |
[ React ] 시작전 알면 좋을 Javascript 문법 (0) | 2021.09.30 |