마이페이지-개인정보수정 기능을 구현하고 있다.

 

이전에 DB 값 삭제(탈퇴) 구현에서 한참을 애먹었었다.

 

https://codelist.tistory.com/71

 

[Node.js, Vue.js, MongoDB] ::디버깅 실패:: 세션 구현하기

기록 파일에 세션을 저장하는 것도 여전히 안되고 그나마 DB에 세션을 저장하는 게 될 가능성이 있다고 판단해서 여기를 집중적으로 해봤는데 여전히 안된다. 파일에 세션 저장하는 것처럼 아예

codelist.tistory.com

 

https://codelist.tistory.com/81

 

[Node.js, Vue.js] 탈퇴 기능(mongodb)

나는 mongodb를 사용하기 때문에 remove(구버전이라 이제 사용 X), deleteOne(), deleteMany() 등의 명령어를 사용해서 document를 삭제해야하는 데 삭제가 안됐다. 해결하고보니 두 가지의 문제점이 있었다.

codelist.tistory.com

 

그래도 해결했으니 설령 UPDATE 기능이 안되더라도 대처할 수 있겠다 싶었는데 UPDATE는 웬만한 시도를 다 해봤으나 동작하지 않았다.

 

UPDATE에서 막힐 거라고는 생각도 못했었는데 DELETE보다 안 되니까 이쯤되면 사실 DELETE도 완벽하게 구현된 게 아닌가? 라는 생각이 들었다.

 

일단 update, updateOne, findAndModify, findOneAndUpdate 등등 시도해봤고 앞에 컬렉션이름.~, db이름.~ 등 다 갖다붙여봤고 DELETE 구현할 때 시도해봤던 FindOne/Find 사용해보고 아예 없애보기도 했는데 5일동안 구현하지 못했다.

 

 

해결

 

참고한 곳 : https://velog.io/@yejineee/Mongoose-Atomic-Update-%EB%B0%A9%EC%8B%9D%EC%9D%84-%EC%B0%BE%EC%95%84%EC%84%9C

 

Mongoose Atomic Update 방식을 찾아서

Account 컬렉션은 transaction 도큐먼트의 objectId를 자신의 필드인 transactions에 추가하여야 한다. 그 과정은 다음 두 가지 일을 해야 한다. Account Object Id로 Account 도큐먼트를 찾는다. 그 도큐먼트의 trasa

velog.io

 

 

 

backend/routes/index.js

router.post('/mypage', (req, res) => { //마이페이지 정보 수정
  User.findOne({name : req.cookies.session},(err, users) => { 
      if(!req.cookies.session || err) {  // 쿠키 없거나 에러 났을 때
        res.redirect('/');
      } else {
        users.updateOne({$set : {phone : req.body.phone}}).exec(); // 여기!!
        res.redirect('/mypage');
      }
  }) 
})

 

마지막에 .exec() 붙이니까 된다.