[First Project] 회원정보 수정 페이지 구현하기(PUT Edit userInfo)

hipiction·2020년 11월 7일
0

FirstProject

목록 보기
9/14
post-thumbnail

1. 회원정보 수정 flow 정리

  1. 로그인한 사용자가 마이페이지에서 '회원정보 수정' 버튼을 클릭한다.
  2. 회원정보 수정 페이지로 넘어가서 바꾸고 싶은 비밀번호와 깃허브 아이디를 입력, '제출하기' 버튼을 누른다.
  3. 데이터베이스에서 가입한 회원이 맞는지 확인하고 개인정보를 수정한다.
  4. 세션을 삭제하고 재로그인하게 한다.

### 2. API - Method: PUT - URL: http://localhost/users/edit - Request [Form Data] password, githubId - Response 200: OK ``` { "githubId" : "githubId" } ``` 500: Internal Server Error ``` err ```

3. 코드 작성 과정

1차 코드

const { users } = require('../../models');

module.exports = {
  put: (req, res) => {
    const { password, githubId } = req.body;

    users
      .findOne({
        where: {
          password: password,
          githubId: githubId,
        },
      })
            .then((data) => {
        if (!data) {
          res.status(500).send('err');
        } else {
          users.update({
            where: {
              password: password,
              githubId: githubId,
            },
          });
         }
      });
  },
};

최종 코드

  1. update 쿼리문이 실행되면서 users 테이블에 있는 사용자인지 확인해주기 때문에 앞서 findOne을 해줄 필요가 없었다.
users.update({뭘 업데이트 할 건지}, 
      {where:{어느 정보를 가진 row에서?}}

update문이 password, githubId를 기준으로 사용자를 찾게끔 작성되어있기 때문에 이 단계에서는 해당 데이터를 찾을 수 없다. where의 기준에는 개인정보수정이 불가한 email이 해당된다.
3) 개인정보를 수정한 뒤에는 수정된 정보로 재로그인을 해야 하므로 세션도 제거해줘야 한다. 그래야 클라이언트에서 로그인 페이지로 리다이렉트해줄 수 있다.

const { users } = require('../../models');

module.exports = {
  put: (req, res) => {
    const { useremail, password, githubId } = req.body;
    users
      .update(
        {
          password: password,
          githubId: githubId,
        },
        {
          where: {
            email: useremail,
          },
        },
      )
      .then((data) => {
        console.log('개인정보수정 완료');
        req.session.destroy((err) => {
          if (err) {
            res.status(400).send('you are currently not logined');
          } else {
            console.log('세션 제거 완료');
            res.status(200).send('정보수정 완료');
          }
        });
      })
      .catch((err) => {
        console.log(err);
        res.sendStatus(500);
      });
  },
};

3-1. 참고한 고마운 글들
시퀄라이즈 쿼리

  1. https://ooeunz.tistory.com/71
  2. https://helloinyong.tistory.com/m/108

4. 회원정보 수정 페이지 구현 회고

  1. 기계적으로 쿼리문을 사용하다보니 정확한 문법을 파악하고 지키지 못했다.
  2. 코드 작성 전 정확한 기능 flow를 정리하지 못했다.

다음에는

  1. 공식문서는 늘 곁에 두자.
  2. 모든 과정이 중요하고, 아직은 서투르다. 꼼꼼히 기록하는 걸 병행하자.





➤계속 공부하고 있습니다. 더 나은 의견과 질문이 있으시다면 언제든, 어떤 경로로든 이야기해주세요.

profile
옳고 그름을 고민합니다

0개의 댓글