express JS - 조회수 기능 구현하기(Sequelize)

Jaewoong2·2020년 8월 1일
0

boilerplate

목록 보기
9/13

이번에 구현할 기능은 '조회수' 입니다. 조회수를 어떻게 구현 할 것인가 하면.

일단 로그인을 passport로 로그인을 하는데, passport로 로그인을 하게 되면 쿠키가

connect.sid=1!@#@!$!@Dqwdqwdjqwilj21#!@

이런식으로 저장이 됩니다.(로그인 할 때마다 쿠키가 갱신됨)

  1. DB에 쿠키 값을 저장합니다. (쿠키 값을 그대로 저장하면 사용자를 특정 지을 수 있다 생각 하기 때문에, 쿠키의 value 값을 나누고 쪼개서 저장할 것입니다.)

  2. 만약 비로그인 유저가 확인 했을 떄는, ip 주소를 받고 new Date().getTime() 을 하여 현재 시간을 받아 옵니다. 그리고 시간을 받아온 것에서 뒤에서 총 6자리를 빼주면 (600000ms => 10분) 10분마다 값이 바뀌는 형태가 됩니다. 그러면 10분마다 자동으로 바뀌는 숫자 고유한 값을 얻게 됩니다 두둥~!
    그리고 그 값과 ip 주소를 잘 혼합해서 db에 저장해서 게시글 db에 add 해줍니다.


쿠키 값, ip 값을 받아오고 db에 저장할 이름으로 바꿀 미들웨어를 만들어 줍니다

exports.cookieParsers = (req, res, next) => {
    if (!req.cookie) {
        const date = new Date().getTime().toString();
        const valueName = req.headers.cookie ? req.headers.cookie.split("=")[1] 
        : (req.ip).slice(0, 2) + '***' + date.slice(0, date - 6);
        if(req.headers.cookie) {
            const first = valueName.slice(0, 35)
            const last = valueName.slice(35, valueName.length)
            req.cookie = last.slice(0, 10) + first.slice(3, 10)
        } else {
            req.cookie = valueName
        }
    }
    next();
  }
  • req.cookie (내가 사용할 쿠키 이름) 이 없으면, req.headers.cookie의 값을 이용해서 값을 받아옵니다. 그리고 이것을 잘 조립 해서(?) db에 넣어줄 값으로 바꿔줍니다.

  • View라는 모델 명을 사용 할 것인데, View에서 req.cookie 값과 대조를 하여 데이터를 가져오지 못하면 post.addViews(view.id)해서 넣어줍니다.

  • 그리고 가져올 Post에서 View를 Include해서 데이터를 클라이언트 쪽으로 보내주면 됩니다.


하면서 든 생각인데, 그냥 ip 값만 사용해서 조회수를 측정하는 것이 중복 방지도 되고 이래저래 좋은 것 같습니다. 하지만 로컬환경에서 만들고 있어서 극적인 조회수가 올라가는 것을 쉽게 보기 위해 쿠키를 이용해서 구현해 보았습니다.

profile
DFF (Development For Fun)

0개의 댓글