자료 정리

express 에러 처리 하기

버퀴 2020. 6. 28. 14:34

간단하게 express 로 서버 예제를 만들어 보았습니다.


post로 요청 오는 데이터 id 값을 타입에 따라
type이 number일 경우에는 상태로 201 과 id값을 내보내고
string일 경우에는 상태가 400이고 error message를 내보냅니다.
그 외의 타입일 경우에는 서버에러로 간주하여 500 상태와 error message를 내보내는 코드입니다.

 

 

1. 각 라우터에서 error를 처리하는 방법

const app = require("express")();
const logger = require("morgan");
const bodyParser = require("body-parser");

app.use(bodyParser())
app.use(logger("dev"))

app.post("/user", (req, res, next) => {
  const { id } = req.body;
  let err = "";
  console.log(typeof id)
  if(typeof id === "number"){
    console.log("??")
    return res.status(201).json(
        { id }
      )
  }else if( typeof id === "string"){
   return res.status(400).json({ status : 400, message : "type error"})
  }
 return res.status(500).json({ status : 500, message : "server error"})
})

app.listen(3000, () => {
  console.log("3000 포트 서버 작동 중")
})




2. error를 처리하는 미들웨어를 만드는 방법

const app = require("express")();
const logger = require("morgan");
const bodyParser = require("body-parser");

app.use(bodyParser())
app.use(logger("dev"))

app.post("/user", (req, res, next) => {
  const { id } = req.body;
  let err = "";
  console.log(typeof id)
  if(typeof id === "number"){
    console.log("??")
    return res.status(201).json(
        { id }
      )
  }else if( typeof id === "string"){
    console.log("??")
    err = new Error("type err");
    err.status = 400;
    next(err);
  }
  err = new Error("server error");
  return next(err);
})

app.use((req, res, next) => {
  const error = new Error("Not Found");
  error.status = 404;
  next(error);
})

app.use((err, req, res, next) => {
  console.log("ERR : ", err);
  res.status(err.status || 500);
  res.json({
    err : {
      status : err.status,
      message : err.message
    }
  })
})

app.listen(3000, () => {
  console.log("3000 포트 서버 작동 중")
})