[게시판 만들기] TIL 7. My page, Edit User Info


  1. update

  2. HTTP 메소드와 CRUD


😀 Notice Board 레파지토리😀
Stack : Javascript, express, nodejs, sequelize


★ : 이번 과정을 통해서 새로 만들어진 파일

☆ : 이번 과정을 통해서 수정된 파일

/
├── 📁/server
│   ├── 📄README.md                     # Notice_Board README.md 파일
│   ├── 📄index.js                      # node.js로 작성된 웹 서버 진입점
│   ├── 📄package.json
│   ├── 📄package-lock.json
│   ├── 📄.gitignore                    # node_modules, env 등 포함되지 않게 설정요망
│   ├── 📁/config                       # 환경변수
│   │    ├── 📄config.js        
│   │    └── 📄jwt.js                   # jwt 관련 환경변수
│   ├── 📁/controllers                  # 기능 API
│   │    ├── 📄☆ index.js        
│   │    ├── 📁User                     # 유저관련 API
│   │    │    ├── 📄index.js 
│   │    │    ├── 📄join.js             # join API
│   │    │    ├── 📄login.js            # login API
│   │    │    └── 📄logout.js           # logout API
│   │    └── 📁MyPage                   # 마이페이지 API
│   │         ├── 📄★ index.js 
│   │         ├── 📄★ myPage.js        # myPage API
│   │         └── 📄★ editUserInfo.js  # editUserInfo API
│   ├── 📁/middlewares
│   │    ├── 📄CheckEmailForm.js        # email 양식이 맞는지 확인하는 middleware
│   │    ├── 📄CheckPassword.js         # password 조건이 맞는지 확인하는 middleware      
│   │    └── 📄checkToken.js            # ★ JWT 검증 middleware
│   ├── 📁/migrations 
│   │    ├── 📄20210819052749-create-users.js
│   │    └── 📄20210819065842-add-column-in-usersTable.js          
│   ├── 📁/models                       # DB 모델 파일
│   │    ├── 📄index.js
│   │    └── 📄users.js
│   ├── 📁/routes
│        └── 📄☆ index.js               # 분기 파일
│   


/controllers/MyPage/myPage.js

const { Users } = require('../../models');
require('dotenv').config();

module.exports = {
  get : async (req, res) =>{
    const email = req.user;

    Users.findOne({
      where : {email}
    })
    .then(data => {
      res
        .status(201)
        .send({
          user : {
            email : data.email,
            nickname : data.nickname
          }
        })
    })
  }
}

/controllers/MyPage/editUserInfo.js

const { Users } = require('../../models');
require('dotenv').config();

module.exports = {
  put : async (req, res) =>{
    const { nickname } = req.body;
    const email = req.user;

    Users.update({
        nickname
      },{
        where: {email}
      })
      .then(data => {
        console.log(data)
        res.status(200).send(data)
      });
  }
}

/controllers/MyPage/index.js

module.exports = {
  myPage : require("./myPage"),
  editUserInfo : require("./editUserInfo"),
}

/routes/index.js

const express = require('express');
const router = express.Router();

const checkToken = require('../middlewares/checkToken');
const { userController, myPageController } = require('../controllers');


router.get('/', (req, res) => {
  res.send("Site access success");
});

router.post('/user/join', userController.join.post);
router.post('/user/login', userController.login.post);

router.use(checkToken);
router.post('/user/logout', userController.logout.post);
router.get('/user/myPage', myPageController.myPage.get);
router.put('/user/myPage', myPageController.editUserInfo.put);

module.exports = router;


1. controllers

1.1 My Page

/controllers/MyPage/myPage.js

const { Users } = require('../../models');
require('dotenv').config();

module.exports = {
  get : async (req, res) =>{
    const email = req.user;

    Users.findOne({
      where : {email}
    })
    .then(data => {
      res
        .status(201)
        .send({
          user : {
            email : data.email,
            nickname : data.nickname
          }
        })
    })
  }
}

어제 JWT 토큰 검증을 하면서 Decoded해서 얻은 PayLoad의 값, email을 req.user에 저장했다. 이 이메일은 인증이 필요한 페이지에서 활용할 수 있다. mypage는 보통 회원가입 시 입력했던 정보를 출력한다. 때문에 Users DB에서 로그인한 고객의 정보를 검색해 가지고 와야 하는데 이때, req.user에 저장된 email값과findOne이라는 함수를 이용하면 해결된다.

1.2 Edit User Info

/controllers/MyPage/editUserInfo.js

const { Users } = require('../../models');
require('dotenv').config();

module.exports = {
  put : async (req, res) =>{
    const { nickname } = req.body;
    const email = req.user;

    Users.update({
        nickname
      },{
        where: {email}
      })
      .then(data => {
        console.log(data)
        res.status(200).send(data)
      });
  }
}

sequelize에서 Users DB에 있는 내용을 수정하기 위해서는 update 라는 함수를 사용해야 한다. 첫 번째 인자로는 수정할 내용을, 두 번째 인자로는 검색할 칼럼과 검색어를 넣는다.


2. 라우터

/routes/index.js

const express = require('express');
const router = express.Router();

const checkToken = require('../middlewares/checkToken');
const { userController, myPageController } = require('../controllers');


router.get('/', (req, res) => {
  res.send("Site access success");
});

router.post('/user/join', userController.join.post);
router.post('/user/login', userController.login.post);

router.use(checkToken);
router.post('/user/logout', userController.logout.post);
router.get('/user/myPage', myPageController.myPage.get);
router.put('/user/myPage', myPageController.editUserInfo.put);

module.exports = router;

라우터 파일을 보면 post, put, get 등의 메소드가 쓰인 것을 알 것이다.

대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능은 4가지가 있다. 이것을 CRUD(크러드)라고 하는데, Create, Read, Update, Delete의 약어이다. 차례대로 데이터의 생성, 조회, 수정, 삭제에 대한 기능이다. 지금까지 배운 것 중 회원가입이 Create, 로그인과 My page가 Read에 해당한다. 지금 할 회원정보 수정이 Update에 해당할 것이다. 앞으로 배울 게시글 삭제와 댓글 삭제는 Delete에 해당하는 기능이다. TIL3 에서 HTTP 요청 메소드에 대해서 잠깐 언급한 적이 있을 것이다. CRUD와 이 HTTP 요청 메소드를 대입해보면 Create를 위해서는 PUT 메소드를 사용하면 되고, Read를 위해서는 GET 메소드를, Update는 PUT 메소드를, Delete는 DELECT 메소드를 사용하면 될 것이다.




© 2020. by RIVER

Powered by RIVER