포도가게의 개발일지

NestJS 초기 명령어(CLI) & 기초 본문

프로젝트

NestJS 초기 명령어(CLI) & 기초

grape.store 2021. 11. 6. 15:52
반응형

1. 시작 project 생성

  • Nest new project-name

2. npm 시작

  • npm run start:dev

3. module, service, controller 생성

  • nest g(global) service(module 등. ..만들 모듈?) boards(이름) --no-spec(초기화????)

사용 패키지

  • Pipe 패키지 : npm install class-validator class-transformer
  • TypeOrm, mysql2 : npm install --save @nestjs/typeorm typeorm mysql2
  • bcryptjs : npm install bcryptjs --save
  • jwt, passport : npm install @nestjs/jwt @nestjs/passport passport passport-jwt --save
  • socket 통신(chat) : npm i -s @nestjs/websockets @nestjs/platform-socket.io @nestjs/platform-express path
  • socket 통신(chat) : npm i -D @types/socket.io
  • kakao login : https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api(개발문서 참고)
  • mongoose : https://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate(개발문서 참고)
  • agora : npm install agora-access-token

 

 

4. Pipe?

data를 type 변환해주거나 유효한지 확인 후 핸들러에 전달

 

 

 

5. mariadb 설치 및 ssequel pro 연동 방법

https://m.blog.naver.com/rkdudwl/221844862020

 

6. Jwt 작동 방식

 

7. Middleware

 

8. live chat(socket.io를 이용한 통신)

한 방에서 chat

9. chat room log 기록

121번방 Log mysql에 기록

10. Dto 초기화 및 멤버에 값 주는법

보통 데코레이터 밑에서 타입지정 해준다.

 

11. express 기초

라우트 돌리는법
라우트 모듈만들어서 use 라우터로 돌림

12. Kakao login & logout (typescript)

/*     controller */

@Get('/kakaoLog')
  loginKakao(@Res() res): void {
    const url = `https://kauth.kakao.com/oauth/authorize?client_id=${this.client_id}&redirect_uri=${this.redirect_uri}&response_type=code`;
    return res.redirect(url);
  }

  @Get('callback')
  async kakaocallback(@Query() access_code: KakaoDto): Promise<any>{
    const token = access_code['code'];
    const res = await this.kakaoService.getToken(token, this.client_id, this.redirect_uri)
    const userinfo = await this.kakaoService.getUserInfo(res.access_token);
    this.access_token = res.access_token;
    console.log(userinfo['access_token']);
    return userinfo;
  }

  @Get('/kakaologout')
  logoutKakao(
    @Res() res): void{
    console.log(this.access_token)
    this.kakaoService.logoutToken(this.access_token);
  }

  }
  
  /* service */
  
  @Injectable()
export class KakaoService {
  async getUserInfo(access_token: string){
    //console.log(access_token);
    return await fetch('https://kapi.kakao.com/v2/user/me',
    {
      method: 'GET',
      headers:{
        'Authorization': `Bearer ${access_token}`
      }
    }).then(res => res.json());
  }

  async getToken(token: string, client_id: string, redirect_uri: string): Promise<any>{
    return await fetch("https://kauth.kakao.com/oauth/token", {
      method: 'POST',
      headers: {'Content-Type': 'application/x-www-form-urlencoded'},
      body: qs.stringify({
        grant_type: 'authorization_code',
        client_id: client_id,
        redirect_uri: redirect_uri,
        code: token
      })
    }).then(res => res.json());
  }

  async logoutToken(access_token: string){
    const respone = await fetch("https://kapi.kakao.com/v1/user/unlink",
    {
      method: 'POST',
      headers: {
        "Content-Type" : 'application/x-www-form-urlencoded',
        'Authorization': `Bearer ${access_token}`
    }
    }).then(res => res.json());
    console.log(respone);
  }

}

log in 화면 redirect

-> 각 유저가 access_token을 할당받는데 이걸 저장 해야되나? db에? logout을 위해서?또는 kakao로부터 유저 정보를 얻기 위해? 아이디는 카카오에서 인증해야되니까 kakao email id보다는 id를 새로 받는게 나은것같다. 미팅때 얘기해봐야겠음 -> jwt token굳이 발급해줘야 되나? 처음에만 login pass되면 모바일 app은 상관없지 않나? 멘토한테 물어봐야될거같네 

 

13. mysql -> mongodb 설치 개발속도 더 빨리가야 될거같다 멘토님 조언

npm install --save @nestjs/mongoose mongoose

CRUD

 

'프로젝트' 카테고리의 다른 글

[Node] Chat Server 부하줄이기(분산처리)[1]  (2) 2022.02.07
[Node] Chat Server 부하줄이기(분산처리)[2]  (0) 2022.02.02
Node js profiling  (0) 2021.12.07
heartalk stress test  (0) 2021.12.04
heartalk 개발  (0) 2021.11.19
Comments