[Express] error 처리하기

적자생존·2022년 12월 29일
0

Node

목록 보기
5/17

1. 에러 처리하기

저번에 다이나믹 라우터로 세팅하였을 경우에 존재하지 않는 경우에도 응답코드가 200이 떠있던 것을 확인 할 수 있다.

하지만 존재하지 않는 아이디로 검색을 했을 경우 404에러가 떠야 하는 것이 프론트 입장에서도 에러 처리하기 좋기 때문에 반드시 에러 처리를 해주어야 한다.

2. 응답값에 에러 보내기

응답값에 에러를 보내는 방법을 알아보면

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}}
})

이렇게 사용하면 간편하게 사용할 수 있다.

3. 하지만 라우팅이 여러 개이면??

언제나 늘 당연히 라우팅은 여러개일 수밖에 없다.

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을 찾을 수 없을 경우 에러가 나온다.

profile
적는 자만이 생존한다.

0개의 댓글