포도가게의 개발일지
NestJS 초기 명령어(CLI) & 기초 본문
반응형
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?
5. mariadb 설치 및 ssequel pro 연동 방법
https://m.blog.naver.com/rkdudwl/221844862020
6. Jwt 작동 방식
7. Middleware
8. live chat(socket.io를 이용한 통신)
9. chat room log 기록
10. Dto 초기화 및 멤버에 값 주는법
11. express 기초
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);
}
}
-> 각 유저가 access_token을 할당받는데 이걸 저장 해야되나? db에? logout을 위해서?또는 kakao로부터 유저 정보를 얻기 위해? 아이디는 카카오에서 인증해야되니까 kakao email id보다는 id를 새로 받는게 나은것같다. 미팅때 얘기해봐야겠음 -> jwt token굳이 발급해줘야 되나? 처음에만 login pass되면 모바일 app은 상관없지 않나? 멘토한테 물어봐야될거같네
13. mysql -> mongodb 설치 개발속도 더 빨리가야 될거같다 멘토님 조언
npm install --save @nestjs/mongoose mongoose
'프로젝트' 카테고리의 다른 글
[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