목록JS/Nest.js (54)
Mini

* 개념주로 에러발생시 모니터링시스템 API 호출등에 사용된다.로그파일 생성* 구현간단하게 res를 바꿔주는 ExceptionFilterimport { ArgumentsHost, Catch, ExceptionFilter, HttpException } from "@nestjs/common";@Catch(HttpException) //모든예외는 HttpException의 자식임 -> 이 예외를 잡겠다.export class HttpExceptionFilter implements ExceptionFilter { catch(exception: HttpException, host: ArgumentsHost) { const context = host.switchToHttp(); const req = c..

* 개념res, req에 둘다 실행되는 특징이 있다.로거, @Transactinoal 등에 유용하다.res, req에 모두 반복되는 공통 로직을 처리하고싶을때 사용하면 좋다. * 로거구현import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from "@nestjs/common";import { Observable, map, tap } from "rxjs";import {v4 as uuid} from 'uuid';@Injectable()export class LogInterceptor implements NestInterceptor { intercept(context: ExecutionContext, next: CallHandler)..

* 설계이미지가 생성되고post 생성되고 를 묶어서all or nothing으로 만들고자 함. * 구현컨트롤러에서 dataSouce 를 주입받음.이걸로 db와 통신할수있는 api임.컨트롤러주의할점은, controller, service에서 같은 qr을 사용해야 트랜잭션이 적용된다는점임이를위해 서비스에서 getRepository 함수를 만듬.@Controller('posts')export class PostsController { constructor( private readonly postsService: PostsService, private readonly dataSource: DataSource, ) {}@Post()@UseGuards(AccessTokenGua..

* 설계이미지가 생성되고post 생성되고 를 묶어서all or nothing으로 만들고자 함. * image table 생성post 는 여러개의 image를 가진다.import { BaseModel } from "./base.entity";import { IsEnum, IsInt, IsOptional, IsString } from "class-validator";import { Column, Entity, ManyToOne } from "typeorm";import { Transform } from "class-transformer";import { join } from "path";import { POST_PUBLIC_IMAGE_PATH } from "../const/path.const";import ..

기존의 문제이미지는 용량이큼 -> 사용자가 모두 업로드후 서버로보내면 시간이오래걸림 -> 느린사이트 -> 앱 삭제해결이미지를 업로드할때 바로 temp 폴더에 업로드해버림업로드 버튼을 누르면, 업로드될 이미지를 txt로 받아서 처리함이후에 서버에서 temp에서 posts 폴더로 이미지들을 옮기면 됨. * 구현 Multermodule을 common 모듈로 옮겨준다.//임시파일들을 저장할 폴더// /public/tempexport const TEMP_FOLDER_PATH = join( PUBLIC_FOLDER_NAME, TEMP_FOLDER_NAME,)@Controller('common')export class CommonController { constructor(private readonly comm..

post 컬럼추가@Column({ nullable:true,})image?: string;이미지 저장할 절대경로, 상대경로 추가import {join} from 'path';//서버 프로젝트의 루트폴더 절대경로export const PROJECT_ROOT_PATH = process.cwd();export const PUBLIC_FOLDER_NAME = 'public';//포스트 이미지들을 저장할 폴더 이름export const POSTS_FOLDER_NAME = 'posts';//공개폴더의 절대경로// /{}/publicexport const PUBLIC_FOLDER_PATH = join( PROJECT_ROOT_PATH, PUBLIC_FOLDER_NAME)//포스트 이미지를 저장할 폴더/// /{..

.envJWT_SECRET=tempHASH_ROUNDS=10PROTOCOL=httpHOST=localhost:3000DB_HOST=localhostDB_PORT=5432DB_USERNAME=postgresDB_PASSWORD=postgresDB_DATABASE=postgresnpm 설치yarn add @nestjs/config앱 모듈에 import@Module({ imports: [ UsersModule, PostsModule, ConfigModule.forRoot({ envFilePath: ".env", isGlobal: true, //모든서비스에 자동 import }), * 서비스 코드 수정서비스 주입@Injectable()export class AuthSer..

* 설계/** * Response * * data : Data[], * cursor : { * after: 마지막 Data의 ID * } * count : 응답한 데이터의 갯수 * next : 다음 요청을 할때 사용할 URL */ * dto 생성dtomain에서 transform true 해줘야 기본값이 반영됨.import { IsIn, IsNumber, IsOptional } from "class-validator";export class PaginatePostDto { /** * 이전 마지막 데이터의 ID * 이것 이후로 데이터를 가져와야함 */ @IsNumber() @IsOptional() where__id_more_than?:number; @IsIn(['ASC', 'DESC..