오늘의 이야기
MVC의 세계를 항해하는것같다.
새로운 것에 대한 도전?
https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8D%B8-%EB%B7%B0-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC
컨트롤러는 모델에 명령을 보냄으로써 모델의 상태를 변경할 수 있다. (예: 워드 프로세서에서 문서를 편집하는 것) 또, 컨트롤러가 관련된 뷰에 명령을 보냄으로써 모델의 표시 방법을 바꿀 수 있다. (문서를 스크롤하는 것)
모델은 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다. 이와 같은 통보를 통해서 뷰는 최신의 결과를 보여줄 수 있고, 컨트롤러는 모델의 변화에 따른 적용 가능한 명령을 추가·제거·수정할 수 있다. 어떤 MVC 구현에서는 통보 대신 뷰나 컨트롤러가 직접 모델의 상태를 읽어 오기도 한다.
뷰는 사용자가 볼 결과물을 생성하기 위해 모델로부터 정보를 얻어 온다.
https://dev-seolleung2.netlify.app/development/Shortly-mvc(2)/
이것도 전혀 모르기 때문에
모시를 시청한다.
https://www.youtube.com/watch?v=J9k9j-jk4ds
HTTP 요청, 응답 이해하기(Express 프로젝트 기준)
MVC 설명
https://www.youtube.com/watch?v=1IsL6g2ixak
그래 이건 알겠어 그래서 어떻게 작성해야하는거니?
controller/link folder
// index.js 임포트
const { url, sequelize } = require('../../models');
const { getUrlTitle, isValidUrl } = require('../../modules/utils');
module.exports = {
get: async (req, res) => {
// models.url.findAll().then(result => res.status(200).json(result));
const result = await url.findAll();
res.status(200).json(result);
},
post: (req, res) => {
getUrlTitle(req.body.url, async (error, title) => {
if (error) {
res.status(400).send('URL이 잘못되었습니다');
return;
}
const result = await url.create({
url: req.body.url,
title,
visits: 1,
});
// console.log('####', result.id, result.url);
res.status(201).send(result);
});
},
redirect: async (req, res) => {
console.log('----params----', req.params);
// WHERE 조건으로 req.params 찾은 후
// 해당 필드 리턴
// UPDATE로 카운트 +1
await url
.findOne({
where: { id: req.params.id },
})
.then(result => {
if (result) {
result.update({
visits: sequelize.literal('visits + 1'),
});
res.status(302).redirect(result.url);
}
res.status(404).send('Can not find URL');
});
// console.log('######', matchedURL);
},
};
// async function createUrl() {
// const instance = await url.create({
// url: 'http://github.com',
// title: 'Github',
// visit: 1,
// });
// }
// async function queryAllUrls() {
// const urls = await url.findAll().then(console.log);
// }
MVC 설명
Traversy Media
https://www.youtube.com/watch?v=pCvZtjoRq1I&t=106s
part3 설명
users table 을 만들어보세요. 필드는 자유롭게 디자인하세요
users 와 urls 는 1:N 관계여야 합니다. 그러기 위해서는,
새 마이그레이션 파일(Migration Skeleton)을 생성해서 urls 에 userId 필드를 만드세요. 이 마이그레이션 파일은 순수하게 필드 수정만을 담당합니다.
마이그레이션 파일에 FK를 설정할 수도 있습니다.
Association 을 정의하세요. (urls와 users가 서로서로가 HasMany, BelongsTo 등으로 정의될 수 있습니다.)
https://velog.io/@sonofhuman20/0907-ORM-Shortly.mvc
유용한 블로그
https://velog.io/@kimkevin90/Javascript%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-tree-%EA%B5%AC%ED%98%84
유투브
https://www.youtube.com/watch?v=CMc7IVdYumw
ORM ??????