기존의 error처리하는 방식은 변하지 않기 때문에 자체적인 모델을 만들어 어디서든 사용할 수 있게 만드는 방법이 좋을 거 같다.
root 경로에 models라는 폴더를 하나 생성해주고 안에 error를 처리할 수 있는 모델을 만들어서 사용할 수 있다.
이때 자바스크립트 class를 이용하여 만들어 보면
models/error.js
class HttpError extends Error {
constructor(message, errorCode){
super(message) // 메시지 추가하는 프로퍼티
this.code = errorCode // errorCode를 추가하는 프로퍼티
}
}
module.exports = HttpError
라고 만들어 볼 수 있다.
이는 class 문법으로 지금은 잘 사용하지 않지만 아직 아무것도 모르기 때문에 일단 사용하고 추후에 리팩토링해서 사용해 봐야겠다.
기존의 사용했던 에러 모델을 위의 모델로 적용해보면
const express = require("express");
const HttpError = require("../models/http-error");
const router = express.Router();
router.get("/:pid",(req,res,next) => {
const placeId = req.params.pid
const place = DUMMY_DATA.find((p) => {
return p.id === placeId
})
// 기존
//if(!place){
// return res.status(404).json({message : "요청을 찾을 수 없습니다"})
//}
// 변경
if(!place){
throw new HttpError("요청을 찾을 수 없습니다", 404)
}
res.json{{place}}
})
router.get("/:uid",(req,res,next) => {
const userId = req.params.uid
const place = DUMMY_DATA.find((p) => {
return p.id === userId
})
// 기존
// if(!place){
// return res.status(404).json({message : "요청을 찾을 수 없습니다"})
// }
// 변경
if(!place){
return next(
new HttpError("요청을 찾을 수 없습니다", 404)
)
}
res.json{{place}}
})
위와 같이 변경할 수 있다.
에러메시지와 상태코드를 파라미터로 넣어 HttpError
함수를 실행하게 하고 그 결과값으로 에러를 반환할 수 있도록 하는 것이 위의 모델이다.