JS/Nest.js

    [Nest] Dependency Injection 의존성 주입<img src=">

    [Nest] Dependency Injection 의존성 주입

    이러면 DI Container가 서비스를 관리해주고service를 사용하는 곳에 같은(싱글톤) 서비스 인스턴스를 주입해준다.

    [Nest JS] 환경변수 설정 / configuration property is not defined 해결 / github 캐시 지우는법

    [Nest JS] 환경변수 설정 / configuration property is not defined 해결 / github 캐시 지우는법

    npm install -g win-node-envnpm install config --save* default : 노출되도 되는 정보를 넣어준다. *devlop : 개발환경에서 숨겨야하는 정보를 넣어준다.-싱크로나이즈 : 컬럼추가시 db 재생성 옵션 -> 운영에서는 절대 사용금지 *production : 실제운영환경 * config 값 실제 사용하기* main > port번호 주입import * as config from 'config';async function bootstrap() { const app = await NestFactory.create(AppModule); const serverConfig = config.get('server'); const port = serverConfig.p..

    [Nest JS] 로그 구현

    [Nest JS] 로그 구현

    * 현업에서는 기능구현 -> 로그 구현 식으로 진행합니다. * 시작시 로그남기기async function bootstrap() { const app = await NestFactory.create(AppModule); const port = 3000; await app.listen(3000); Logger.log(`Application running on port ${port}`);}bootstrap(); * 컨트롤러1. 멤버변수로 logger 생성@Controller('boards')@UseGuards(AuthGuard())export class BoardsController { private logger = new Logger('BoardController'); constructor(pri..

    [Nest JS] 자신이 생성한 게시물만 삭제

    [Nest JS] 자신이 생성한 게시물만 삭제

    * 컨트롤러마찬가지로 @getuser로 매개변수 추가@Delete('/:id')deleteBoard(@Param('id', ParseIntPipe) id: number , @GetUser() user : User){ //제공되는 파이프로 검사해주시고 return this.boardsService.deleteBoard(id, user);} * 서비스delete 조건에 인자로 받은 user만 추가async deleteBoard(id : number, user:User){ const result = await this.boardRepository.delete({id, user}); //기본제공되는 delete 사용 if(result.affected ===0){ //영향받은게 0개 === 못찾은경우 예외..

    [Nest JS] 특정 유저의 게시물 가져오기

    [Nest JS] 특정 유저의 게시물 가져오기

    * 문제 : 유저2의 토큰으로 조회시, 모든 게시글이 조회됨 * 컨트롤러@GetUser로 user 정보를 받은후, 인자로 추가@Get()getAllBoard(@GetUser() user : User){ return this.boardsService.getAllBoards(user);}* 서비스인자로 받아온 user.id를 이용해where절 이용해게시글 filterasync getAllBoards(user : User){ //raw sql생성, board table에서 할거임 const query= this.boardRepository.createQueryBuilder('board'); //로그인한 유저의 게시글만 query.where('board.userId = :userId', {userId:..

    [Nest JS] 유저-게시글의 관계 형성, 게시글 생성시 유저정보 추가

    [Nest JS] 유저-게시글의 관계 형성, 게시글 생성시 유저정보 추가

    * 각각의 클래스에 각자의 변수를 넣어야함.@Entity()@Unique(['username'])export class User extends BaseEntity{... //상대의타입, 상대방에서 나를 부르는 별칭, this(user)를 가져올때 상대방(board)도 가져오도록 @OneToMany(type => Board, board => board.user, {eager: true}) boards: Board[]@Entity()export class Board extends BaseEntity{ ... @ManyToOne(type => User, user=>user.boards, {eager: false}) user: User; * 게시글 생성시 유저 정보 넣기* 컨트롤러여기서 이전에 만..

    [Nest JS] 인증된 유저만 게시글 보고쓰기 구현

    [Nest JS] 인증된 유저만 게시글 보고쓰기 구현

    * 보드모듈에서 Auth모듈 import@Module({ imports: [ TypeOrmModule.forFeature([BoardRepository]), AuthModule ], controllers: [BoardsController], providers: [BoardsService, BoardRepository],})export class BoardsModule {} * 보드 컨트롤러에서 컨트롤러 레벨@ 선언 => 모든 함수에 영향가도록AuthGuard() 임에 주의!@Controller('boards')@UseGuards(AuthGuard())export class BoardsController {

    [Nest JS] 커스텀 데코레이터(@) => 바로 user 가져오기

    [Nest JS] 커스텀 데코레이터(@) => 바로 user 가져오기

    * GetUser 커스텀 데코레이터 생성import { createParamDecorator, ExecutionContext } from "@nestjs/common";import { User } from "./user.entity";export const GetUser = createParamDecorator((data, ctx: ExecutionContext): User =>{ const req = ctx.switchToHttp().getRequest(); return req.user;}) * 컨트롤러@Post('/test')@UseGuards(AuthGuard())test(@GetUser() user : User){ console.log('user',user);}@GetUser에서 우리가 만든..