Code Monkey home page Code Monkey logo

nodebird's Introduction

nodebird

시퀄라이즈 문서
데이터베이스 설명
MySQL 매뉴얼
워크벤치 매뉴얼

추가기능

  • 팔로잉 끊기
  • 프로필 정보 변경하기
  • 게시글 좋아요 누르기 및 좋아요 취소하기
  • 게시글 삭제하기
  • deserializeUser 캐싱하기

sequelize 설치

  • config
  • migrations
  • models
  • seeders

폴더 생성

  • view (템플릿 파일)
  • routes (라우터 파일)
  • public (정적 파일)
  • passport (passport 패키지)

DB 연결

$ npx sequelize db:create

Sequelize CLI [Node: 14.15.4, CLI: 6.2.0, ORM: 6.5.0]

Loaded configuration file "config/config.json".
Using environment "development".
Database nodebird created.
  • 로컬 mysql
$ brew services start mysql

# 콘솔 접속
$ mysql -h localhost -u root -p

Passport 모듈로 로그인 구현

$ npm i passport passport-local passport-kakao bcrypt
  1. 로그인

    1. 라우터를 통해 로그인 요청이 들어옴
    2. 라우터에서 passport.authenticate 메서드 호출
    3. 로그인 전략 수행 (local / kakao)
    4. 로그인 성공 시 사용자 정보 객체와 함께 req.login 호출
    5. req.login 메서드가 passport.serializeUser 호출
    6. req.session 에 사용자 아이디만 저장
    7. 로그인 완료
  2. 로그인 이후

    1. 요청이 들어옴
    2. 라우터에 요청이 도달하기 전에 passport.session 미들웨어가
      passport.deserializeUser 메서드 호출
    3. req.session 에 저장된 아이디로 데이터베이스에서 사용자 조회
    4. 조회된 사용자 정보를 req.user 에 저장
    5. 라우터에서 req.user 객체 사용 가능

카카오 로그인

카카오 로그인용 애플리케이션 등록

  • 로그인 > 내 애플리케이션 > 애플리케이션 추가하기
  • 앱 생성 후 화면에서 REST API 키를 복사하여 .env 파일에 저장

KAKAO_ID=c551234555......22afd1d35bd

  • 앱 설정 > 플랫폼 > Web 플랫폼 등록 (사이트 도메인 입력)

http://localhost:8001

  • 제품설정 > 카카오 로그인 > 활성화 설정 ON
  • Redirect URL 설정
    (kakaoStrategy.js 의 callbackURL)

http://localhost:8001/auth/kakao/callback

  • 제품설정 > 카카오 로그인 > 동의항목 > 로그인 동의항목 작성
    예제에서는 email 이 반드시 필요
    감ㅅ이 없는 경우를 대비해 카카오 계정으로 정보 수집 후 제공 체크 후 저장

테스트코드

테스트 커버리지

  • 스크립트 추가
"scripts": {
    ..
    "coverage": "jest --coverage"
  },
  • 실행

$ npm run coverage

  • Result
-----------------|---------|----------|---------|---------|-------------------
File             | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-----------------|---------|----------|---------|---------|-------------------
All files        |      84 |      100 |      60 |      84 |                   
 controllers     |     100 |      100 |     100 |     100 |                   
  user.js        |     100 |      100 |     100 |     100 |                   
 models          |   33.33 |      100 |       0 |   33.33 |                   
  user.js        |   33.33 |      100 |       0 |   33.33 | 5-49              
 routes          |     100 |      100 |     100 |     100 |                   
  middlewares.js |     100 |      100 |     100 |     100 |                   
-----------------|---------|----------|---------|---------|-------------------

Test Suites: 2 passed, 2 total
Tests:       7 passed, 7 total
Snapshots:   0 total
Time:        1.978 s, estimated 2 s

통합테스트

  • 테스트 환경 database 분리

config/config.json

  "test": {
    "username": "root",
    "password": "0000",
    "database": "nodebird_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
  • 테스트 환경 database 생성
╰─$ npx sequelize db:create --env test

Sequelize CLI [Node: 14.15.4, CLI: 6.2.0, ORM: 6.5.0]

Loaded configuration file "config/config.json".
Using environment "test".
Database nodebird_test created.

nodebird's People

Contributors

griffinna avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.