node, vue

Node, Vue 일지 #7 (20210907) 회원 정보 수정

uni5948 2021. 9. 9. 14:35

-Mypage.vue 메뉴 수정

 *App.vue에서 했던 것 처럼 '회원 정보 수정'과 '회원 탈퇴'를 changeMenu 로 변경하고

   mounted() 변수로 메소드 호출하는 형식으로 수정한다.

<div>

        <h3>마이 페이지</h3> <hr />

        <input type="button" @click="changeMenu(1)" value="회원정보 수정" />

        <input type="button" @click="changeMenu(2)" value="회원 탈퇴" />

</div>

... ...

 mounted() {

            this.changeMenu(1); // 메소드 호출하기

},

 

7. 회원 정보 수정

-회원 정보 수정 구현

 *mypage에서 버튼 생성(vue mapage.vue)

 *회원 가입 시 입력한 정보가 얼마 없기 때문에 username 만 수정한다.

 *정보 수정 버튼을 만들어 버튼 클릭 시 정보 수정이 실행되도록 한다.

 <div>

        <h3>마이 페이지</h3> <hr />

        <input type="button" @click="changeMenu(1)" value="회원정보 수정" />

        <input type="button" @click="changeMenu(2)" value="회원 탈퇴" />

        <div v-if="menu===1">

            <h3>회원정보 수정</h3>

            <input type="text" v-model="username" />

            <input type="button"  value="정보 수정"  @click="updateHandle "/>

 

        </div>

        <div v-if="menu===2">

            <input type="button"  value="회원 탈퇴"  @click="deleteHandle "/>

        </div>

    </div>

 

 *화면 확인

회원 정보 수정 화면

 

 *Mypage 클릭 시 초기 저장한 username 값을 text 창에 표현하도록 한다.(vue Mypage.vue)

 async changeMenu(val){

                this.menu = val;

                if(val === 1 ) {

                    const url ="/member/update";

                    const response = await axios.get(url, {

                        headers : {token : this.token } 

                    });  <-member.js 에서 update 코드 입력

                    console.log(response);

                    if(response.data.res === 1) { //출력값 확인 후 아래 작성 

                                                        

                    }

                }

            },

 *node update(get) 생성(node member.js)

 *update는 정보를 먼저 가져오고 이후 업데이트를 하는 것으로 get, put 두가지 update를 만든다.

//127.0.0.1:3000/member/update

router.get('/update'checkTokenasync function(reqresnext){

    try{

        //인증 후 넘어오는 토큰에 포함된 아이디 값

        const userid = req.idx//auth 참고

        const query = {_id : userid};

        

        //db연결

        const dbconn = await mongoclient.connect(mongourl);

        const coll = dbconn.db(mongodb).collection(mongocoll);

        const result = await coll.findOne(query, {projection : {name:1}});

 

        res.send({res : 1data : result});

    }

    catch(error){

        console.error(error);

        res.send({ret:-1data:error}); //에러

    } 

});

 

 *console 값 확인(크롬)

 *node에서 보낸 resut를 받아 vue에서 response를 출력하여 전달 되는 값을 확인한다.

  ex) res의 값, name의 위치

console 값 확인

 *username 출력

   async changeMenu(val){

                this.menu = val;

                if(val === 1 ) {

                    const url ="/member/update";

                    const response = await axios.get(url, {

                        headers : {token : this.token } 

                    });

                    console.log(response);

                    if(response.data.res === 1) { //출력값 확인 후 아래 작성

                        this.username = response.data.data.name;   <- 콘솔창에 출력된 정보를 바탕으로 name 경로 확인  

                    }

                }

            },

 

 *화면 확인

 *콘솔창에 나타나 name 값이 자동으로 반영된 것을 확인

username 출력 확인

 

 *정보 수정 버튼 클릭 시 이루어질 methods 구현(vue Mypage.vue)

<input type="button"  value="정보 수정"  @click="updateHandle "/>

 ... ...

async updateHandle() {

                const url ="/member/update";

                const headers = {"Content-Type" : "application/json""token" : this.token };

                const body = {

                    username : this.username,

                };

                const response = await axios.put(urlbody, {headers : headers});

                console.log(response);      <-member.js 에서 update 코드입력 후 확인

                //수정 완료 후 메세지 처리 등...

            },

 *node update(put) 생성(node member.js)

router.put('/update'checkTokenasync function(reqresnext){

    try{

         //인증 후 넘어오는 토큰에 포함된 아이디 값

         const userid = req.idx//auth 참고

         const query = {_id : userid};

         //바꿀 내용

         console.log(req.body);   <- 변경할 변수 확인

console . log ( req . body ); 

         const change = {$set : {name : req.body.username}};

         //db연결

         const dbconn = await mongoclient.connect(mongourl);

         const coll = dbconn.db(mongodb).collection(mongocoll);

         //수정

         const result = await coll.updateOne(querychange);

         console.log(result);   <- result 결과 호출하여  if 문에 사용할 변수 찾기

  console . log ( result );

         if(result.matchedCount === 1){

             return res.send({ret : 1data : "수정 성공."});

         }

         return res.send({ret : 0data : "수정 실패."});

    }

    catch(error){

    } 

});

 

 *console 값 확인(크롬)

 *node에서 보낸 resut를 받아 vue에서 response를 출력하여 수정 성공 유무를 확인한다.

console 값 확인

 *콘솔 값에 대한 알림창 출력(vue mypage.vue)

 async updateHandle() {

                const url ="/member/update";

                const headers = {"Content-Type" : "application/json""token" : this.token };

                const body = {

                    username : this.username,

                };

                const response = await axios.put(urlbody, {headers : headers});

                console.log(response);

                //수정 완료 후 메세지 처리 등...

                if(response.data.ret === 1 ) {

                    alert(response.data.data);

                }

                else{

                    alert(response.data.data);

                }

            },

 

*회원 정보 수정 구현

회원 정보 수정