[게시판 만들기] TIL 7. My page, Edit User Info
update
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
메소드를 사용하면 될 것이다.