mongoose 쿼리 로그 남기는 법
app.module.ts 에서
mongoose.set(’debug’, true);
명령어를 추가하면 mongoose의 쿼리가 로그에 찍히게 된다.
단, prod로 배포시에는 false로 변경할 것!!!
이 MODE변경을 변수로 관리하면 편하다!
환경변수로 dev / prod 로 로그레벨 관리
.env 에서 dev / prod 모드를 관리하고
MODE 변수를 분기처리하는 로직을 추가하면 된다.
controller 설계
import {
Controller,
Get,
Post,
UseFilters,
UseInterceptors,
} from '@nestjs/common';
import { CatsService } from './cats.service';
import { HttpExceptionFilter } from 'src/common/exceptions/http-exception.filter';
import { SuccessInterceptor } from 'src/common/interceptors/success.interceptor';
@Controller('cats')
@UseInterceptors(SuccessInterceptor)
@UseFilters(HttpExceptionFilter)
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Get()
getCurrentCat() {
return 'current cat';
}
@Post()
async singUp() {
return 'signup';
}
@Post('login')
logIn() {
return 'login';
}
@Post('logout')
logout() {
return 'logout';
}
@Post('upload/cats')
uploadCatImg() {
return 'uploadImg';
}
}
JavaScript
복사
기존 controller 내용을 지우고, 프로젝트에 맞게 재설계
스키마 생성
파일 생성
cats 폴더 내부에 cats.schema.ts 생성!
cats.schema.ts 구조
import { Schema, SchemaFactory, SchemaOptions } from '@nestjs/mongoose';
import { Document } from 'mongoose';
const options: SchemaOptions = {
timestamps: true,
};
@Schema(options)
export class Cat extends Document {}
export const CatSchema = SchemaFactory.createForClass(Cat);
JavaScript
복사
→ @Schema : 데코레이터를 사용해서 스키마 정의
→ options : 옵션에 들어가 있는 timestamp: true 는 MongoDB가 자동으로 ‘createdAt’ 과 ‘updatedAt’ 필드를 추가하고 관리하게 한다.
→ extends Document : Cat클래스는 Mongoose의 Document클래스를 상속받아 문서 객체로 취급받는다. 이 Document클래스로 MongoDB 컬렉션에서 문서가 생성되고 조작된다.
→ SchemaFactory.createForClass(Cat) : Cat 클래스를 스키마로 변환한다. 이는 export되어서 다른 모듈에서 사용할 수 있게 된다.
컬럼 정의
@Prop 데코레이터를 사용하여 속성을 추가한다.
이제 CatSchema는 email / catName / password / imgUrl 속성을 가지게 되었다.
속성 제약조건 추가
속성에 대한 제약조건은 @Prop() 데코레이터 내부에 json형태로 추가할 수 있는데, 여기서 사용된 required 는 Nullable로 생각하면 되고,
unique는 스프링에서 사용하던 것과 같은 제약조건이다.
Class Validator
Class Validator라이브러리는 데코레이터 기반의 검증을 사용할 수 있게 해준다. 데코레이터 기반 검증은 Pipe기능과 같이 사용될 때 속성의 메타타입에 접근할 수 있기 때문에 아주 유용하다.
설치
npm i --save class-validator class-transformer
JavaScript
복사
class validator 추가정보
전역 pipe추가
Class Validator를 사용하기 위해서는
main.ts에서 useGlobalPipes 를 통해서 전역설정을 해주어야 한다.
class validator 사용
email 속성에 IsEmail / IsNotEmpty 라는 class validator를 추가하여
해당 필드가 이메일 형태가 맞는지, 비어있지는 않은 지에서 검증을 한다.
이와 같이
다양한 검증 도구를 사용할 수 있다.