- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 에러핸들링
- CRUD
- 리팩터링 2판
- LEVEL 1
- 면접을 위한 cs 전공지식 노트
- CSS
- typescript
- 코딩테스트
- 프로그래머스
- java
- LEVEL 2
- sql
- First Project
- Git
- 알고리즘
- react
- Err-Handling
- TMIL
- 오늘도 개발자가 안된다고 말했다
- 코어 자바스크립트
- Docker
- MariaDB
- TWIL
- mongodb
- TIL
- Refactoring
- javascript
- 배포
- LEVEL1
- 아고라스테이츠
Archives
성장에 목마른 코린이
(S3W2) TIL 53일차 220414 (MVC) 본문
728x90
오늘의 학습목표
Advanced
- ORM의 장점을 이해할 수 있다.
- Sequelize ORM과 관련 CLI 툴들을 공식 문서를 보고 사용할 수 있다.
- Sequelize를 이용해 모델을 작성할 수 있다.
- Sequelize를 이용해 마이그레이션을 할 수 있다.
- 마이그레이션의 개념과 필요성을 이해할 수 있다.
- Sequelize ORM으로 1:1. 1:N, N:N 관계를 표현할 수 있다.
- MVC 디자인 패턴의 한계를 이해할 수 있다.
학습내용
// sequelize 세팅
npm install sequelize
npm install --save-dev sequelize-cli
npx sequelize-cli init
mysql 로그인, 데이터베이스 생성
// mysql 로그인
mysql -u -root -p
// config.json에 등록된 shortly_dev라는 데이터베이스 생성
CREATE DATABASE shortly_dev;
config/config.json
{
"development": {
"username": "root",
"password": "1234",
"database": "shortly_dev",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": "1234",
"database": "shortly_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": "1234",
"database": "shortly_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
model 생성하기
// Model 생성하기
npx sequelize-cli model:generate --name Url --attributesurl:string,title:string,visits:integer
모델 생성: models/url.js
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class url extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
}
}
url.init({
url: DataTypes.STRING,
title: DataTypes.STRING,
visits: {type: DataTypes.INTEGER, defaultValue: 0},
}, {
sequelize,
modelName: 'url',
});
return url;
};
npx sequelize-cli db:migrate
routes/links.js
const express = require('express');
const router = express.Router();
const linkController = require('../controllers/links')
/* GET links listing. */
router.get('/', linkController.get)
router.post('/', linkController.post)
router.get('/:id', linkController.redirect)
module.exports = router;
controller 구현
const { url: urlModel } = require('../../models')
const { getUrlTitle, isValidUrl } = require('../../modules/utils')
module.exports = {
get: (req, res) => {
// const result = await urlModel.findAll();
urlModel.findAll().then(data => res.status(200).json(data))
},
post: (req, res) => {
// req.body로 받은 url을
// get 요청보내서 html문서에서 title 태그 사이의 값을 가져옴 => util.js
// 그 다음 title, url 저장 -> model
// 저장한 데이터 전송
const url = req.body.url;
// 잘못된 url 보냈으니까 니 잘못(400)
if (!isValidUrl(url)) {
return res.sendStatus(400);
}
// url 잘 보냈을 때
else {
getUrlTitle(url, (err, result) => {
// 잘보냈는데 에러있으니 서버 잘못(500)
if (err) {
return res.sendStatus(500);
}
// 잘보냈고 에러없으니 json으로 변환해
else {
urlModel.findOrCreate({
where: {url},
defaults: {
title: result,
}
}).then(([result, created]) => {
// 생성했을때는 201 (created)
if (created) {
return res.status(201).json(result);
}
// 이미 있는것을 조회 204 (found)
// testcase 잘못되서 201 넣음
else {
return res.status(201).json(result);
}
})
.catch((err) => {
console
})
}
})
}
},
redirect: async (req, res) => {
// req.params.id를 변수로 빼놓고
// 얘를 가지고 모델에 조회를 하는데 findByPk로 찾기
// 그 찾은 모델에 visits 값을 업데이트
// 찾은 결과의 url 필드값으로 redirect
const urlId = req.params.id;
const result = await urlModel.findByPk(urlId);
await result.update({
visits: result.visits + 1,
})
return res.redirect(result.url);
},
}
오늘의 회고
오늘부터 컨디션이 조금 안좋아진다는 느낌을 받았습니다.
내일은 다행히도 챕터 정리만 있는 날이라 조금 여유가지면서 컨디션 회복에 힘쓰도록 하겠습니다!
MVC 많이 어렵네요. ORM까지 학습하니 뭔가 뇌에 과부하온 느낌입니다 ㅎㅎ..
주말에 컨디션관리도 잘하고, 못한 정리 마저하도록 하겠습니다!
'Today I Learned' 카테고리의 다른 글
(S3W3) TIL 55일차 220418 ([인증/보안] 기초) (0) | 2022.04.18 |
---|---|
(S3W2) TIL 54일차 220415 (NoSQL) (0) | 2022.04.15 |
(S3W2) TIL 52일차 220413 (MVC) (0) | 2022.04.13 |
(S3W2) TIL 51일차 220412 (MVC) (0) | 2022.04.12 |
(S3W2) TIL 50일차 220411 (관계형 데이터베이스 완전 정리) (0) | 2022.04.11 |
Comments