๐ŸŒฑ → ๐ŸŒณ

[node.js] Error Handling ๋ณธ๋ฌธ

Server/Node.js

[node.js] Error Handling

BAY 2022. 9. 24. 10:06
728x90

์„œ๋ฒ„ err๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด err๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ๋‹ค์Œ err ๋ฉ”์‹œ์ง€์™€ status ์ฝ”๋“œ๋ฅผ ์ „๋‹ฌํ•ด ์ค˜์•ผํ•จ 

 

๐Ÿ“error ๋˜์ง€๊ธฐ

router.get('/:id', (req, res) => {
  const userData = USER.find((user) => user.id === req.params.id);
  if (userData) {
    res.send(userData);
  } else {
    const err = new Error('ID not found');
    err.statusCode = 404;
    throw err;
  }
});

 ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ err๊ฐ€ ๋ฐœ์ƒํ•œ ์ง€์ ์—์„œ new Error๋ฅผ ํ†ตํ•ด err ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ throw๋กœ ์ „๋‹ฌ 

 

์ด๋Ÿฐ ์‹์œผ๋กœ err๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ ์ด๋Ÿฐ ํŽ˜์ด์ง€๋Š” ๊ฐ€๊ธ‰์  ํ”ผํ•˜๋Š” ํŽธ์ด ์ข‹์œผ๋ฏ€๋กœ 

app.js์—์„œ err ํ•ธ๋“ค๋ง ํ•˜๊ธฐ

 

๐Ÿ“app.js์—์„œ err handling

app.js์˜ ๋ฏธ๋“ค์›จ์–ด ์ค‘ ๋งˆ์ง€๋ง‰ ๋ฏธ๋“ค์›จ์–ด์— throw๋œ err๋ฅผ ๋ฐ›๋Š” ๋ฏธ๋“ค์›จ์–ด ์ถ”๊ฐ€ 

app.use((err, req, res, next) => {
  console.log(err.stack);
  res.status(err.statusCode);
  res.send(err.message);
});
ํ•ด๋‹น ๋ฏธ๋“ค์›จ์–ด๋Š” err ์ธ์ž์™€ res ๋ฅผ ๊ฐ™์ด ์จ์•ผ ํ•˜๋ฏ€๋กœ app.use() ๋ฉ”์†Œ๋“œ์˜ ์ธ์ž๋ฅผ ์ „๋ถ€ ์‚ฌ์šฉํ•ด ์ค˜์•ผ ํ•จ
3๊ฐœ๋งŒ ์“ฐ๋ฉด ์ฒซ๋ฒˆ์งธ๋Š” req, ๋‘๋ฒˆ์งธ๋Š” res,  ์„ธ๋ฒˆ์งธ๋Š” next ๋กœ ์ธ์‹ํ•˜๊ณ , ๋ฌด์—‡๋ณด๋‹ค err ๋ฅผ ๋ชป๋ฐ›์Œ ! 
์„œ๋ฒ„์‚ฌ์ด๋“œ์—์„œ๋Š” ์–ด๋–ค ์—๋Ÿฌ์ธ์ง€ ์•Œ์•„์•ผ ํ•˜๋ฏ€๋กœ console.log(err.stack)์„ ๋‚ด๋ณด๋‚ด์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณด๋˜ error๋‚ด์—ญ์„ ํ™•์ธ 

 

๐Ÿ‘Š๐Ÿป ์˜์™ธ์˜ ๊ณณ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ ํ–ˆ์„ ๊ฒฝ์šฐ 

์ง์ ‘ ์ •์˜ํ•œ error statusCode๊ฐ€ ์•„๋‹Œ ๊ณณ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด express๊ฐ€ ์•Œ์•„์„œ error statusCode ๋˜์ ธ์คŒ 

ํ•˜์ง€๋งŒ ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•˜๋ฉด err.statusCode ๋ผ๋Š” ๊ณณ์—๋Š” ์—๋Ÿฌ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— res.status(undefind)๊ฐ€ ๋˜์–ด ์•„๋ž˜์ฒ˜๋Ÿผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ

 

์˜์™ธ์˜ ๊ณณ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ ํ–ˆ์„ ๋•Œ

๊ทธ๋ ‡๊ฒŒ ๋•Œ๋ฌธ์— ์˜์™ธ์˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์—๋Ÿฌ ์Šคํƒ์„ ๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์ฝ”๋“œ ์ž‘์„ฑ 

app.use((err, req, res, next) => {
  console.log(err.stack);
  res.status(err.statusCode || 500);
  res.send(err.message);
});

-> ์–ด๋””์„œ ๋ฐœ์ƒํ•œ ๊ฒƒ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์„œ๋ฒ„์ƒ์˜ ๋ฌธ์ œ์ด๋ฏ€๋กœ err ๊ฐ์ฒด์— statusCode๊ฐ€ ์—†์œผ๋ฉด 500์„ ๋„์šฐ๋Š” ๊ฒƒ 

 

๊ทธ๋Ÿผ, ์ด๋ ‡๊ฒŒ err.message๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์–ด์„œ err ํ•ด๊ฒฐ ๊ฐ€๋Šฅ 

 

728x90