TIL

해달·2021년 9월 2일
0

TIL

목록 보기
43/80
post-thumbnail
post-custom-banner

Today 공부

  • Sequelize Associations
  • Sprint

Sprint

  • app.js
const app = express(); // 리퀘스트 받아서 리스폰스로 보내줄수 있는 express
app.use(express.json()); // payload받아올때 별도로 json화 안해줄 수 있다

const linksRouter = require('./routes/links');
app.use('/links', linksRouter);
  • routes/links
const linkController = require('../controllers/links/index')

router.get('/', linkController.get);
// 두번째인자는 콜백인데 가지고 온 객체 controller.key 입력해서
// value(callback)인 콜백실행
  • controllers/links/index
// select url from urls where url.id = req.params.id
  getById: async (req,res) => {
    let result = await url.findOne({where : { id : req.params.id}}) // 아이디 : 받아온 id 랑 같은 레코드 한줄 가져옴(객체하나)
    await result.increment('visits')
    // await result.update({ visits : result.visits + 1})
    // await url.update( {visits : result.visits + 1} ,{where: {id: req.params.id}}) // {키 : 벨류} 씨퀄라이즈 객체형태로 테이블관리 {키:벨류}
    res.redirect(result.url);
    res.status(302).send(); // response 끝났다고 알려준다
  },


  post: (req,res) => { // paylode에 url이 적힌 상태에서 post요청이 들어오면 title만들어주고 객체형태로 보내줘야됨
    if(isValidUrl(req.body.url)){
      getUrlTitle(req.body.url, async(err,titleName)=>{ // 겟타이틀에서받는 인자가  url,콜백
        if(err){ // url은 멀쩡한데 에러났을때
          res.status(404).send();
        } else { 
          let result = await url.create({title : titleName, url : req.body.url, visits: 0}); // url테이블에 추가해주는부분(insert into )
          res.status(201)
          res.json(result);
        }
      })
    }
    else{
      res.status(404).send();
    }
  },
    

Models Usage

조회 - finders

.findOne({ where: {title: 'aProject'}}) // 특정 컬럼으로 검색
.findByPk() // 프라이머리키로 검색
.increment(더하고싶은 컬럼)
.increment('더하고싶은 컬럼', {by : '더할 숫자'}) 
.increment([ 'my-integer-field', 'my-very-other-field' ], {by: 2})// 여러개칼럼
---------------------------------------------------------------
//값을 변경하고, 변경점을 DB에 반영
.update(
    { status: 'inactive' }, /* 변경할 특성의 값을 명시합니다. */
    { where: { subject: 'programming' }} /* 변경될 레코드의 조건을 명시합니다. */
  )
----------------------------------------------------------
.create()
Person.create({
  name: 'Rambow',
  firstname: 'John'
}).then(john => {
  console.log(john.get({
    plain: true
  }))
})
// 결과:
// { name: 'Rambow',
//   firstname: 'John',
//   id: 1,
//   createdAt: Tue, 01 May 2012 19:12:16 GMT,
//   updatedAt: Tue, 01 May 2012 19:12:16 GMT
// }

마치며,

Sequelize의 라이브러리를 사용하면서 메소드를 사용하게 되었는데,
sql구문과 비슷한점이 많아 이해는 조금 어렵게 하였지만
처음에 적용해서 문장을 만드는데 시간이 오래걸렸다.
각 라이브러리마다 도움을 주는것이 다르기때문에 혼동하지 않고 잘 이해해야겠다는 생각이 다시 한번 들었고, Sequelize는 프로미스기반이기때문에 .then 과 async를 사용하게 되었고 다시 한번 복습하게 되었다.

post-custom-banner

0개의 댓글