저번에 다이나믹 라우터로 세팅하였을 경우에 존재하지 않는 경우에도 응답코드가 200이 떠있던 것을 확인 할 수 있다.
하지만 존재하지 않는 아이디로 검색을 했을 경우 404에러가 떠야 하는 것이 프론트 입장에서도 에러 처리하기 좋기 때문에 반드시 에러 처리를 해주어야 한다.
응답값에 에러를 보내는 방법을 알아보면
const express = require("express");
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 : "요청을 찾을 수 없습니다"})
}
res.json{{place}}
})
이렇게 사용하면 간편하게 사용할 수 있다.
언제나 늘 당연히 라우팅은 여러개일 수밖에 없다.
const express = require("express");
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 : "요청을 찾을 수 없습니다"})
}
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 : "요청을 찾을 수 없습니다"})
}
res.json{{place}}
})
이런식으로 두 번 세 번 반복해서 쓸 수는 없는 노릇이다.
따라서 app.js파일에서 미들웨어로 관리를 해주면 매우 편하다.
app.js
//생략
app.use((error, req, res, next) => {
if(res.headerSent){
return next(error)
}
res.status(error.code || 500)
res.json({message : error.message || "에러입니다"})
})
로 미들웨어를 만들어 주고
기존의 파일로 돌아와서
// 기존
if(!place){
return res.status(404).json({message : "요청을 찾을 수 없습니다"})
}
// 변경
if(!place){
const error = new Error("요청을 찾을 수 없습니다")
error.code = 404;
return next(error) // 비동기 처리시
throw error // 동기 처리시
}
로 변경하면 요청한 url을 찾을 수 없을 경우 에러가 나온다.