6. Nest.js 광부왕 게임 서버 Filter 적용
2023. 3. 3. 16:31ㆍ프로젝트/게임 서버 - Nest.js
1. src/common/filters/error.exception.ts 파일 생성
error.exceptions.ts 파일을 만들어서 해당 코드를 넣어준다.
서버 처리 중 에러 발생 시 필터를 이용사용 하여 처리 한다.
- 1. 개발 중 에러 발생처리를 분기 처리 하여 개발 서버에서만 확인 하기 위해 console.log() 로 에러 값을 나타낸다.
- 2. 에러 메시지가 String, Object 두 타입으로 발생 하기 때문에 형태를 확인하고 분기 처리한다.
import {
ExceptionFilter,
Catch,
ArgumentsHost,
HttpException,
} from '@nestjs/common';
import { Response, Request } from 'express';
@Catch()
export class ErrorExceptionFilter implements ExceptionFilter {
catch(exception: unknown, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const request = ctx.getRequest<Request>();
const status =
exception instanceof HttpException ? exception.getStatus() : 500;
// 1. dev 개발서버 실행 일 때 에러 발생 시 로그 출력
if (process.env.NODE_ENV === 'dev') {
console.log('Error : ' + exception);
}
// 2. 에러 메시지가 String, Object 두 형태로 전달되기 때문에 분기 처리
const error =
exception instanceof HttpException
? (exception.getResponse() as
| string
| { error: string; statusCode: number; message: string | string[] })
: 'Internal server error';
if (typeof error === 'string') {
response.status(status).json({
result: false,
statusCode: status,
method: request.method,
path: request.url,
error,
});
} else {
response.status(status).json({
result: false,
statusCode: status,
method: request.method,
path: request.url,
...error,
});
}
}
}
2. main.ts에 useGlobalFilters 적용
import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import expressBasicAuth from 'express-basic-auth';
import { AppModule } from './app.module';
//추가
import { ErrorExceptionFilter } from './common/filters/error.exception';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
//추가
app.useGlobalFilters(new ErrorExceptionFilter());
if (process.env.NODE_ENV === 'product') {
app.use(
['/docs'],
expressBasicAuth({
challenge: true,
users: { [process.env.SWAGGER_USER]: process.env.SWAGGER_PWD },
}),
);
}
const config = new DocumentBuilder()
.addBearerAuth()
.setTitle('광부왕')
.setDescription('king-of-mine-worker-back Api')
.setVersion(process.env.VERSION)
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('docs', app, document);
await app.listen(process.env.PORT);
}
bootstrap();
728x90
반응형
'프로젝트 > 게임 서버 - Nest.js' 카테고리의 다른 글
8. Nest.js 광부왕 게임 서버 JWT 설정 (0) | 2023.03.03 |
---|---|
7. Nest.js 광부왕 게임 서버 Interceptor 적용 (0) | 2023.03.03 |
5. Nest.js 광부왕 게임 서버 Swagger 적용 (0) | 2023.03.03 |
4. Nest.js 광부왕 게임 서버 Redis 설정 [캐시 데이터] (0) | 2023.03.02 |
3. Nest.js 광부왕 게임 서버 로그 저장 [로그 데이터] (0) | 2023.02.19 |