Side/uber-eats
라이브러리 없이 만드는 JWT - 2
라이브러리 없이 만드는 JWT - 2
2021.06.06우리만의 token module 만들기 nest g mo jwt nest cli 로 jwt module 을 생성합니다. static module 과 dynamic module 여기서 기억해둬야 할부분은 module 의 종류는 두가지가 존재하는데, 첫 번째는 'static module'입니다. UserModule 같은 경우 어떠한 설정도 되어 있지 않습니다. 이게 바로 static module 입니다. 여기서 또 중요한 점은 .forRoot에 마우스를 올려보면 .forRoot는 Dynamic Module이라는 사실입니다. Dynamic module 은 설정이 적용되어 있는 module 입니다 그게 다에요 ! Users module 에서 ConfigModule 을 ConfigService 로 불러 쓴 것처럼..
라이브러리 없이 만드는 JWT - 1
라이브러리 없이 만드는 JWT - 1
2021.06.06Token 만들기 우선 token 을 만들기 위해서는 javascript 에서 쓸수있는 json web token 이 필요합니다. npm i jsonwebtoken npm i @types/jsonwebtoken --only-dev // sign with RSA SHA256 var privateKey = fs.readFileSync('private.key'); var token = jwt.sign({ foo: 'bar' }, privateKey, { algorithm: 'RS256'}); json web token 의 예제입니다. privateKey 에 제가 설정한 token key 가 들어가면 됩니다. 이를 위해 app module 을 수정할게요 ... imports: [ ConfigModule.forR..
Nestjs , Typeorm 에서 Hasing passwords
Nestjs , Typeorm 에서 Hasing passwords
2021.06.05비밀번호 단방향 암호화 데이터 베이스에 입력된 비밀번호를 그대로 노출하게 된다면 보안에 큰 결함이 생기게 됩니다. 그래서 입력된 비밀번호를 단방향 암호화를 통해 못생기게 바꿔줄 예정입니다. 먼저 암호화를 하기 전에 Listener 에대해 짚고 넘어가야 합니다. Typeorm listener Listener 는 기본적으로 entity 에 무슨일이 생길때 실행됩니다. entity 는 nestjs 에서 정의하는 데이터베이스 모델이에요 우리가 원하는것은 Beforeinsert 데코레이터 입니다. insert 가 되기전에 먼저 실행해주는 데코레이터 입니다. User class 에 BeforeInsert 부분을 추가합니다. 그리고 password 를 암호화 하기위해 "bcrypt" 를 사용합니다. bcrypt np..
Nestjs - User model
Nestjs - User model
2021.06.01nest g mo users로 모듈을 생성합니다. 이전에 연습삼아 만들고 있었던 레스토랑 모듈은 빼주도록 하겠습니다. entities 에서도 빼줄게요 imports 에 UsersModule 이 잘 추가되었습니다. users 폴더 안에 entities 폴더를 만들고 user.entity.ts 파일을 만들게요 user.entity.ts 는 database 모델을 정의하기 위한 ts 파일입니다. TypeOrmModule 의 syncronize 값을 True 로 바꿔주면 user.entity.ts 에서 정의한 Column 들을 그대로 데이터베이스에 반영합니다. user.entity.ts import { Column, Entity } from 'typeorm'; type UserRole = '..
Nestjs - Typeorm Repository 사용하기
Nestjs - Typeorm Repository 사용하기
2021.05.31repository import restaurants 라는 App 안에서 resturants.module.ts 에서 entities 안에 정의된 모델을 import 해야 합니다. TypeOrmModule.forFeature() 안에 배열 형식으로 entities 안에 정의된 모델을 import 합니다. DB에 접근할 수 있는 service 만들기 restaurants/restaurants.service.ts 파일을 만든뒤 다음과 같이 작성합니다. 그런다음 restaurants.resolver.ts 로 이동하여 constructor(private readonly restaurantService: ResaurantService) {} 를 추가합니다. 마지막으로 restaurants.module.ts 에서 p..
TypeORM setup 과 Nestjs Config
TypeORM setup 과 Nestjs Config
2021.05.23postgresql 을 사용할 것이고 postgresql 이 설치되어 있따는 가정하에 진행 합니다. 실행 환경은 MAC OS 입니다. nestjs 에서 typeorm 을 사용하기 위해서 다음과 같이 설치합니다. npm i --save @nestjs/typeorm typeorm pg app.module.ts import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { GraphQLModule } from '@nestjs/graphql'; import { TypeOrmModule } from '@nestjs/typeorm'; import { RestaurantsModule } from './res..
NestJs Validating ArgsTypes
NestJs Validating ArgsTypes
2021.05.23data transfer object 의 유효성 검사 class validator 를 사용하여 각 필드의 유효성 검사를 합니다. pipe line에 쓰일 class-transformer도 설치합니다. npm i class-validator npm i class-transformer create-restaurant.dto.ts import { InputType, Field, ArgsType } from '@nestjs/graphql'; import { IsBoolean, IsString, Length } from 'class-validator'; @ArgsType() export class CreateRestaurantDto { @Field((type) => String) @IsString() @Lengt..
Nestjs - InputTypes and ArgumentTypes
Nestjs - InputTypes and ArgumentTypes
2021.05.22Mutation 만들기 restaurants.resolver.ts 파일에 다음과 같이 Mutation을 만듭니다. import { Resolver, Query, Args, Mutation } from '@nestjs/graphql'; import { CreateRestaurantDto } from './dtos/create-restaurant.dto'; import { Restaurant } from './entities/restaurant.entity'; @Resolver((of) => Restaurant) export class RestaurantResolver { @Mutation((returns) => Boolean) createRestaurant( @Args('name') name: string..
NestJs - Arguments
NestJs - Arguments
2021.05.22TypeScript 와 Graphql 의 type 선언 차이 import { Resolver, Query, Args } from '@nestjs/graphql'; import { Restaurant } from './entities/restaurant.entity'; @Resolver((of) => Restaurant) export class RestaurantResolver { // graphql 에서 list를 명시하는방법 @Query((returns) => [Restaurant]) // typescript 에서 list를 명시하는 방법 restaurants(@Args('veganOnly') veganOnly: boolean): Restaurant[] { return []; } } 위의 코드를 살펴보..
Nestjs - ObjectType
Nestjs - ObjectType
2021.05.22ObjectType NestJs의 ObjectType을 이해하기 쉽게 데이터베이스와 유사한 entity 를 만들겠습니다. 폴더 구조는 이전 글을 참고해주세요 restaurants.entity.ts 라는 파일을 만들어 주세요 ObjectType은 데코레이터로써 작동합니다. GraphQL 의 관점에서 봤을때 Restaurant가 어떻게 생겼는지 묘사합니다. // entity 란 데이터 베이스 모델을 생각하면 이해하기 쉽다. import { Field, ObjectType } from '@nestjs/graphql'; // 아직 데이터베이스가 없어서 이해하기 쉽게 특징을 살펴본후 데이터 베이스를 추가할 예정 @ObjectType() export class Restaurant { /..
Nestjs + react Day1
Nestjs + react Day1
2021.05.19backend 시작하기 nest.js cli 를 사용하여 app을 만듭니다. $ nest g application nuber-eats-backend uber eats 를 clone coding 하기 위해서 nuber-eats 라고 프로젝트명을 설정했습니다. 그리고 git 저장소를 만들고 gitognore를 추가합니다. .gitignore nodemodule/ package-lock.json dist/그리고 이번 프로젝트에서는 REST를 사용하는 대신 GRAPHQL 을 사용할 예정입니다. $ npm i @nestjs/graphql graphql-tools graphql apollo-server-express 다음과 같이 설정합니다. app.moudles 은 main.ts 로 import 되는 유일한 mod..