본문 바로가기

Nodejs/NestJS

[NestJS] passport-jwt JWTStrategy 10 yarn add @nestjs/passport passport passport-jwt jsonwebtoken @types/jsonwebtoken jwtStragety 추가하고Guard 추가한 후, 적용할 controller나 method에 guard 적용import { FastifyRequest } from "fastify";import { PassportStrategy } from "@nestjs/passport";import { Injectable } from "@nestjs/common";import { Strategy as JwtStrategy, ExtractJwt, VerifiedCallback } from "passport-jwt";import { ConfigService } from "@ne.. 더보기
[NestJS]Swagger 설정 및 @UseInterceptors (ClassSerializerInterceptor) 적용하기 09 yarn add @nestjs/swagger @fastify/swagger @fastify/swagger-ui  setSwaggerMiddleware(app);function setSwaggerMiddleware(app: NestFastifyApplication) { const config = new DocumentBuilder() .setTitle("Nestjs Toy API DOCS") .setVersion("1.0") .addBearerAuth({ type: "http", scheme: "bearer", name: "JWT", in: "header" }) .build(); const document = SwaggerModule.createDocument(app, confi.. 더보기
[NestJS] Lifecycle global filter, pipes, exception 설정하기 08 nestjs 라이프사이클 설명: https://velog.io/@haron/NestJS-Lifecycle-Events yarn add underscore @types/underscore* underscore에서 omit 하려고 사용하는것인데, 필요없으면 안써도됨 middleware > Guard > Interceptor > Filter > Pipes > Custom Decotators 순서로 실행** nests/core 소스 확인하기 global 설정interceptor 2개 만들었음1. success 처리 (PUT, DELETE, PATCH 공통처리)2. logging 처리 (multipart에서 value는 지워서 출력) filter도 2개1. AllExceptionFilter2. Validation.. 더보기
[NestJS] nest-winston 사용하기 07 필요한 패키지 설치yarn add nest-winston winston winston-daily-rotate-file  winston-daily 옵션 만들고, winstonOption 만들고 nest-winston으로 WinstonModule화 하고 내장 logger에 설정하기import { WinstonModule, utilities } from "nest-winston";import * as winston from "winston";import * as winstonDaily from "winston-daily-rotate-file";const dailyOption = (level: string, module?: string) => { const dirname = module ? `./logs/${.. 더보기
[NestJS] 파일 업로드 처리 로컬 & AWS S3 06 파일을 업로드할 경로를 설정하고, 해당 경로에서 파일을 다운받을 수있어야 함. 2가지 방식을 살펴볼 텐데1. local의 public에서 처리하는 방법 (@fastify/static)2. s3에 업로드 하는 방법(@aws-sdk/client-s3) 1. local에 업로드하는 방법은 아래와 같다. import * as fs from "fs";import { join } from "path"; const path = join(process.cwd(), "public", "assets", "images", profile.filename); fs.writeFileSync(path, profile.value);업로드할 경로 설정하고 writeFileSync 하면 끝** 필요하다면 .env네 confi.. 더보기
[NestJS] fastify @UploadedFile, @UploadedFiles 커스텀 만들기 05 fastify에서는 Express.Multer.File를 사용할 수 없기 때문에(사용을 시도하면 할 수 있는데 파일명을 불러오는 필드값이 달라서 이름 필드가 안나왔었음. 해당문제만 해결하면 쓸 수 있을 수도?) 만들어서 사용합니다. FastifyFile을 정의합니다.src/types/fastify.file.tsexport type FastifyFile = { value: Buffer; filename: string; encoding: string; mimetype: string;}; UploadedFile, UploadedFiles를 정의 합니다.** 모든 옵션에 대응하기 위한 decorator라기 보다는 당장 편하게 쓸 목적, 개발하다가 발견되는 이슈사항은 추가 개발하면서 사용 예정src/dec.. 더보기
[NestJS] fastify middleware 추가하기(@fastify/multipart) 04 기본 미들웨어만 추가yarn add @fastify/cookie @fastify/session @fastify/multipart @fastify/cors @nestjs/platform-fastify yarn add class-validator class-transformer- fastify를 사용할 것이므로 관련 패키지 추가- class 검증을 위한 class-validator, class-transformer 추가 .env에 SESSION_SECRET추가#APP PORTPORT=4000#SECRET KEYSESSION_SECRET=#DATASBASE CONFIGDATABASE_HOST=127.0.0.1DATABASE_PORT=3306DATABASE_USERNAME=DATABASE_PASSWORD=DA.. 더보기
[NestJS] TypeORM(MySQL) 설정 Migration 포함 03 mysql typeorm을 살펴봅니다.yarn add mysql typeorm @nestjs/typeorm typeorm-extensionyarn add nestjs-cls @nestjs-cls/transactional @nestjs-cls/transactional-adapter-typeorm1. mysql과 typeorm 설치2. transactional을 위한 의존성 추가* transactional을 좀 더 살펴보고 싶다면 참고cls에서 Transactional 사용하기: https://papooch.github.io/nestjs-cls/plugins/available-plugins/transactionaltypeorm-transactional 사용하기: https://github.com/Alihey.. 더보기
[NestJS] config 불러오기 설정 추가 02 nestjs 에서 config 모듈을 지원하므로  nestjs/config를 사용하면 쉽게 .env 파일을 가져올 수 있음.import { ConfigModule } from '@nestjs/config';@Module({ imports: [ConfigModule.forRoot()], controllers: [AppController], providers: [AppService],})export class AppModule {} 그런데 여기서 원하는 것은 .env 말고, .env.local, .env.development를 가져오고 싶은 것.때문에 envFilePath 옵션을 활용해서 NODE_ENV에 따라 파일명을 명시해줘야 함. start:dev 할 때, .env.local을 호출 할 목적으로 .. 더보기
[NestJS] 프로젝트 설정 01 목표: prettierrc 설정 / .env 설정 .prettierrc{ "arrowParens": "always", "printWidth": 150, "trailingComma": "es5", "semi": true, "singleQuote": false, "endOfLine": "auto", "tabWidth": 2, "useTabs": false}선호하는 설정으로 변경.[탭은 2칸, 줄길이는 최대 150, doubleQuote]변경했으면yarn format* 변경 이후 VS Code 버그인지, 빨간줄 쳐지고 바로 적용안되는 이슈 있음. 재실행 한번 해줘야 함. .env 설정env는 총 3가지로 생성 .env, .env.development, .env.local(.gitiIgnore)... 더보기