2021년 3월 3일

Ji Taek Lim·2021년 3월 3일
1
post-thumbnail

오늘의 이야기

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=E7Voso411Vs&t=57s

https://www.youtube.com/watch?v=J9k9j-jk4ds

HTTP 요청, 응답 이해하기(Express 프로젝트 기준)

https://dutax.tistory.com/8

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://flyingsquirrel.medium.com/sequelize-table-join%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-34dc1ce4e86f

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 ??????

https://www.youtube.com/watch?v=dHQ-I7kr_SY

profile
임지택입니다.

0개의 댓글