티스토리 뷰

사용자 정보를 업데이트 하는건 쉽게 생각했는데 여기서 배울점이 있다.

일단 사용자 정보를 업데이트 하기 위해서는 데이터를 입력받을 form을 만들고 post로 보내고

controller에서 req.body로 이름 붙인 각각의 데이터를 받는다.

update할 user를 db에서 찾아온다음 update 하면 된다

await User.findByIdAndUpdate(id,{업데이트 쿼리})

이렇게 간단하게 생각했는데

아무리 업데이트를 해도 내가보는 view의 input에 계속 같은 수정 전의 value가 나온다.

???

id 는 현재 session object의 user의 _id로 정의했다. 

그리고 데이터베이스의 User를 업데이트 했다.

데이터베이스를 확인해보니 저장된 user의 데이터가 정상적으로 변해있었다.

즉, 데이터베이스와 pug view파일이 연결되어 있지 않다는 뜻이다.

역추적을 해보면

pug의 input value에 loggedInUser는 locals의 값이다.

locals의 loggedInUser는 req.session.user이다.

req.session.user는 postLogin에서 처음 로그인할때 넣어준 그 데이터이다.

그래서 계속 로그인할때 줬던 그 데이터가 출력된 것이다.

여기서 테스트 해볼것. 그럼 데이터를 수정했다가, 로그아웃하고 다시 로그인하면 세션이 업데이트 되어있을까?

왜냐하면 postLogin에서 user 불러올때 데이터베이스에서 불러오니까, 정보가 업데이트 되어야 정상이다.

된다. 로그아웃 하고 로그인 하니까 데이터베이스에서 제대로 불러온다.

즉 예상했던대로 pug의 value와 db가 연결되어있지 않다.

해결방법은 위와 같이 업데이트 한 값을 updatedUser라는 변수에 담아서 세션을 업데이트 해준다.

단 findByIdAndUpdate를 실행해서 업데이트 된 후의 데이터을 제대로 return 받기 위해서는 조건이 필요하다.

new:true라는 옵션이다.

이렇게 해주면 updatedUser에는 업데이트 된 후의 데이터가 들어가고 그것을 req.session.user에 업데이트 해주면 된다.

그럼 locals와 연결되고 locals는 pug에 연결된다.

이제야 pug는 업데이트 되고 난 후의 데이터를 출력한다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함