board.service.ts 에서 아래와 같이 다른 서비스를 이용하려니까 발생한 문제

@Injectable()
export class BoardService {
  constructor(
    private readonly hashtagService: HashtagService,
    private readonly categoryService: CategoryService,
    private readonly boardToCategoryService: BoardToCategoryService,
    private readonly hashtagToBoardService: HashtagToBoardService,
    @InjectRepository(Board)
    private readonly boardRepository: Repository<Board>,
  ) {}

 

 

에러문구

 ERROR [ExceptionHandler] Nest can't resolve dependencies of the BoardService (HashtagService, CategoryService, ?, HashtagToBoardService, BoardRepository). Please make sure that the argument BoardToCategoryService at index [2] is available in the BoardModule context.

Potential solutions:
- Is BoardModule a valid NestJS module?
- If BoardToCategoryService is a provider, is it part of the current BoardModule?
- If BoardToCategoryService is exported from a separate @Module, is that module imported within BoardModule?
  @Module({
    imports: [ /* the Module containing BoardToCategoryService */ ]
  })

 

 

해결방식

1. 오류내용을 확인 -> 잘 이해가 안된다.

2. 오류메세지를 구글링 -> module의 imports 부분에 추가를 해주거나 중복된것이 있는지 확인해야 한다고함.

3. 다시 오류메시지 확인

->  솔류션에 적혀있는 대로 내가 사용하려는 서비스가 BoardModule의 일부분이 아니였다.

 

오류 코드

import { BoardController } from './board.controller';
import { BoardService } from './board.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Board } from '../../entities/Board.entity';

@Module({
  imports: [
    TypeOrmModule.forFeature([Board]),
  ],
  controllers: [BoardController],
  providers: [BoardService],
})
export class BoardModule {}

 

해결한 코드

import { BoardController } from './board.controller';
import { BoardService } from './board.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Board } from '../../entities/Board.entity';
import { HashtagModule } from '../hashtag/hashtag.module';
import { HashtagToBoardModule } from '../hashtag_board/hashtagToBoard.module';
import { BoardToCategoryModule } from '../board_category/boardToCategory.module';
import { CategoryModule } from '../category/category.module';

@Module({
  imports: [
    TypeOrmModule.forFeature([Board]),
    CategoryModule,
    HashtagModule,
    BoardToCategoryModule,
    HashtagToBoardModule,
  ],
  controllers: [BoardController],
  providers: [BoardService],
  exports: [BoardService],
})
export class BoardModule {}

 

< 추가로 설정해야하는 부분 >

imports 한 각 module에 내가 사용할 service를 exports 해줘야한다.

예시

import { Module } from '@nestjs/common';
import { ReplyController } from './reply.controller';
import { ReplyService } from './reply.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Reply } from '../../entities/entity.index';

@Module({
  imports: [TypeOrmModule.forFeature([Reply])],
  controllers: [ReplyController],
  providers: [ReplyService],
  exports: [ReplyService], // <--- 이 부분을 써줘야 다른 곳에서 서비스 사용가능
})
export class ReplyModule {}

 

 

마치 app.module.ts 에서 내가 만든 서비스를 사용하기 위해서 다른 모듈을 다 imports에 넣듯이

여기서도 같은 원리로 내가 원하는 서비스를 포함하는 모듈을 imports에 넣으면 되는 것이였다.

설치한 라이브러리

https://www.npmjs.com/package/typeorm-snake-naming-strategy

 

typeorm-snake-naming-strategy

Snake naming strategy for TypeORM.. Latest version: 1.0.2, last published: 4 years ago. Start using typeorm-snake-naming-strategy in your project by running `npm i typeorm-snake-naming-strategy`. There is 1 other project in the npm registry using typeorm-s

www.npmjs.com

 

상황:

TypeORM 에서 snakeCase 로 자동으로 바꿔주는 라이브러리를 설치했는데 위와 같은 에러가 뜸

 

이유:

ES 버전이 맞지 않아서 생기는 오류

 

문제

이것 때문에 setting에서 ES 버전도 바꾸어보고 했는데 

결국, 위에서 설치한 라이브러리가 너무 오래 된것이다.... 

 

최신버전으로 배포된 아래 라이브러리를 설치 하니 바로 해결된다... 라이브러리 이름이 너무 똑같다;;;;

https://www.npmjs.com/package/typeorm-naming-strategies

 

typeorm-naming-strategies

Custom naming strategies for typeorm. Latest version: 4.1.0, last published: 2 years ago. Start using typeorm-naming-strategies in your project by running `npm i typeorm-naming-strategies`. There are 98 other projects in the npm registry using typeorm-nami

www.npmjs.com

 

 

라이브러리는 항상 최신버전으로!!!

공개된지 너무 오래된 것이 있으면 한번 의심해보고 최신버전이 있는지 찾아보자

 

프론트 엔드에서 다른 요청은 다 작동하였는데 딱 한 가지


에러 메세지
"PATCH
http://localhost:63342/localhost:3000/stations/17
404 (Not Found)"

에러 발생 코드
`http:/${IP_ADDRESS}:3000/stations/${id}`

 

이 부분만 오류가 발생... 

 

포스트맨 이용해서 테스트한 결과 백엔드는 문제 없음을 확인

한참을  조사하다가 ... 

작동이되는 코드를 복사/붙여넣기하다가 찾은 에러

http:/ 에 "/" 이 빠졌다...

 

에러 메세지에서 주소를 못 찾는다는 말이 나왔을때 주소와 관련 된 부분을 집중적으로 먼저 확인하자!!

 

비슷 한 로직의 다른 코드들은 정상적으로 작동하는데 하나만 에러가 발생 할 때는

1. 에러 메세지를 확인 후 잘 못된 내용을 가정 먼저 확인

2. 에러 메세지에서 가리키는 부분에서 관련 로직 확인

3. 정상적으로 작동하는 코드와 비교

 

이 순서로 에러를 확인해보자..

 

에러 메세지

 

remote: Invalid username or password.
fatal: Authentication failed 

 

이유

1. 토큰이 변경되어서 다시 설정이 필요한 경우

2. 생성된 토큰이 없는 경우

 

깃허브 ->  settings -> Developer settings -> personal access tokens -> Tokens(classic) 선택하여 새로운 토큰 생성

 

새로 생성할때 최대한 긴 유효기간을 선택

 

다시 작업하던 폴더로 가서

 

orgine을 삭제 후 받은 토큰을 이용하여 다시 설정

 

git remote remove origin

git remote add origin https://닉네임:토큰@github.com/repository

닉네임은 자신의 깃허브 아이디 repository 는 작업 할 레포지토리 경로 url

+ Recent posts