혼자 고민해보기_ 개발/TIL (Today I Learned)
20231102(목)_ 최종프로젝트 리팩토링
nuri-story
2023. 11. 2. 19:16
금일 달성 항목
1) 최종프로젝트 Redis추가
문제 해결 과정 1 - TypeORMError: Provided "skip" value is not a number. Please provide a numeric value
[문제]
cache 코드를 작성하고 테스트하려고 하는데 자꾸만 타입 에러가 떴습니다.
// 채용공고 전체 조회
@Get()
@ApiOperation({
summary: '채용공고 전체조회 API',
description: '채용공고 전체조회',
})
@ApiCreatedResponse({ description: '채용공고 전체조회' })
async findAllJobposting(
@Query() pageReqDto: PageReqDto,
): Promise<Jobposting[]> {
const { page, size } = pageReqDto;
const cachedList: Jobposting[] = await this.cacheManager.get(
`jobpostingList${page}`,
); // 캐싱된 리스트가 있는지 조회
if (cachedList) {
return cachedList;
} else {
const jobposting = await this.jobpostingService.findAllJobposting({
pageReqDto,
});
await this.cacheManager.set(`jobpostingList${page}`, jobposting, 5);
// 캐싱된 데이터가 없을 경우 페이지별로 캐시를 구분하고 5초 동안 데이터를 캐싱
return jobposting;
}
}
[시도 및 해결]
찾아보니 skip의 타입이 Number로 설정되어있지 않다고 하지만 이미 pageReqDto에는 Number로 설정되어있는 상황이었습니다.
import { Transform } from 'class-transformer';
import { IsInt } from 'class-validator';
export class PageReqDto {
@Transform((param) => Number(param.value))
@IsInt()
page?: number = 1;
@Transform((param) => Number(param.value))
@IsInt()
size?: number = 20;
}
npm run start:dev 를 실행하니 파일 정리로 인해 오류가 생긴 부분이 있어 모두 수정해주었더니 오류가 해결되었습니다.
경로의 문제였던 것으로 보입니다.
문제 해결 과정 2 -
EntityMetadataNotFoundError: No metadata for "Jobposting" was found.
[문제]
포스트맨을 통해 api를 테스트하는데 나타나는 오류였습니다.
[시도 및 해결]
확인해보니 경로의 문제였습니다. 파일 정리를 하면서 같이 생긴 문제 같습니다.
orm.config.ts
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
import { ConfigService } from '@nestjs/config';
import { SnakeNamingStrategy } from 'typeorm-naming-strategies';
async function ormConfig(): Promise<TypeOrmModuleOptions> {
const configService = new ConfigService();
const commonConf = {
SYNCHRONIZE: true, // 엔티티에 있는대로 테이블을 생성을 할건지 정한다.
ENTITIES: [__dirname + '/apis/domain/*{.ts,.js}'],
MIGRATIONS: [__dirname + '/migrations/**/*{.ts,.js}'],
MIGRATIONS_RUN: false,
};
return {
type: 'mysql',
database: configService.get<string>('DB_DATABSE_NAME'),
host: configService.get<string>('DB_HOST'),
port: Number(3306),
username: configService.get<string>('DB_USERNAME'),
password: configService.get<string>('DB_PASSWORD'),
logging: true,
namingStrategy: new SnakeNamingStrategy(), // createAt, updateAt 스네이크 케이스로 전환
synchronize: commonConf.SYNCHRONIZE,
entities: commonConf.ENTITIES,
migrations: commonConf.MIGRATIONS,
migrationsRun: commonConf.MIGRATIONS_RUN,
};
}
export { ormConfig };
위 코드에서 ENTITIES의 경로를 수정해주었습니다.
[참고]
https://velog.io/@fj2008/NestJSentitymetadatanotfound-error.typeorm-error-%ED%95%B4%EA%B2%B0
NestJS/entitymetadatanotfound error.typeorm error 해결
entitymetadatanotfound error.typeorm error No metadata for "User" was found 라는 에러 로고가 떠서 찾아보니 entity를 설정할때 config파일의 위치를 entities라는 옵션에 명시를 해뒀어야했는데 이부
velog.io