-
Notifications
You must be signed in to change notification settings - Fork 3
Error Class
박지율 edited this page Oct 16, 2021
·
2 revisions
작성자 | 작성일시 |
---|---|
earthkingman | 2021-10-16 |
에러 클래스를 생성해서 코드 중복을 최소화
- Error Class 생성
class HttpException extends Error {
status: number;
message: string;
constructor(status: number, message: string) {
super(message);
this.status = status;
this.message = message;
}
}
export default HttpException;
- Error 오류 처리 미들웨어
import { NextFunction, Request, Response } from 'express';
import HttpException from '../exceptions/HttpException';
function errorMiddleware(error: HttpException, request: Request, response: Response, next: NextFunction) {
const status = error.status || 500;
const message = error.message || 'Something went wrong';
response
.status(status)
.send({
status,
message,
})
}
export default errorMiddleware;
- index.ts
errorMiddleware를 가장 하단에 나두는 이유 Express는 모든 미들웨어 함수 및 라우트를 실행했으며 이들 중 어느 것도 응답하지 않았다는 것을 나타내기 때문
~~
app.use(cors(corsOptions));
app.use("/auth", authRouter);
app.use("/posts", postRouter);
app.use("/users", userRouter);
app.use("/pages", pageRouter);
app.use(errorMiddleware);
~~
- Contoller (예시코드)
next() 함수로 어떠한 내용을 전달하는 경우('route'라는 문자열 제외), Express는 현재의 요청에 오류가 있는 것으로 간주하며, 오류 처리와 관련되지 않은 나머지 라우팅 및 미들웨어 함수를 건너뜁니다.
const createAnswerLike = async (req: DecodedRequest, res: Response, next: NextFunction) => {
const { answerId, isLike, answerUserId } = req.body;
const userId: number = req.decodedId;
const likeService: LikeService = new LikeService();
try {
await likeService.createAnswerLike({ userId, answerId, isLike, answerUserId });
return res.status(200).json({
result: true,
message: "create Success",
})
} catch (error) {
console.log(error);
next(new HttpException(404, 'Answer not found'));
}
}