---
# System prepended metadata

title: "\U0001F3C5 Day 24 - uncaughtException、unhandledRejection"
tags: [Node.js 直播班 - 2024 春季班]

---

# 🏅 Day 24 - uncaughtException、unhandledRejection

在設計程式時也有可能會有開發者程式沒寫好、沒考慮到的部分，這時可能就因此出現不可預期的錯誤，因此在 Node.js，運行程式出錯時，若是**同步**的程式就會出現 `uncaughtException`，**非同步**程式則會出現 `unhandledRejection`

同步的錯誤例如：app.js 中有出現未宣告過的變數 test
非同步錯誤例如：某 async function 中，未使用到 await，或遠端資料庫連線失敗 （若未使用 catch 接錯誤就會發生 `unhandledRejection`）

在事件發生時，將錯誤記錄於 server，並在處理後離開此 process

**uncaughtException 處理範例**
```javascript
// 程式出現重大錯誤時
process.on('uncaughtException', err => {
  // 記錄錯誤下來，等到服務都處理完後，停掉該 process
  console.error('Uncaughted Exception！');
  console.error(err);
  process.exit(1);
});
```
出錯時的紀錄會出現：
```
Uncaughted Exception！
ReferenceError: test is not defined
    at Object.<anonymous> (...略)
```
**unhandledRejection 處理範例**
```javascript
// 未捕捉到的 catch 
process.on('unhandledRejection', (reason, promise) => {
  console.error('未捕捉到的 rejection：', promise, '原因：', reason);
  // 記錄於 log 上
});
```
出錯時的紀錄會出現：
```
未捕捉到的 rejection： Promise {
  <rejected> ReferenceError: timeSor is not defined
      at ...略
} 原因： ReferenceError: timeSor is not defined
    at ...略
```

可觀看完整 [GitHub](https://github.com/gonsakon/express-week4-sample/blob/week5/app.js)  範例 



### 參考資源

- [Event: uncaughtException](https://nodejs.org/api/process.html#event-uncaughtexception)
- [Event: unhandledRejection](https://nodejs.org/api/process.html#event-unhandledrejection)

題目
---
將上方兩段 `uncaughtException`、`unhandledRejection` 錯誤處理加入到自己的專案 app.js 中，嘗試測試在有錯誤的狀況是否有正確紀錄錯誤

## 回報流程

將答案寫在 CodePen 並複製 CodePen 連結貼至底下回報就算完成了喔! 
解答位置請參考下圖（需打開程式碼的部分觀看）

![](https://i.imgur.com/vftL5i0.png)

<!-- 解答：  
運行 GitHub 程式碼有正確紀錄錯誤於 server 即可
-->




回報區
---
<!-- 
將答案貼至下方表格內，格式：
| Discord 暱稱 | [CodePen](連結) |
-->

|    Discord    |   CodePen ／ 答案  |
|:-------------:|:-----------------:|
| xxx | [CodePen]() |
| 2魚 | [CodePen](https://codepen.io/ijrekmsn-the-sans/pen/JjVQNOq) |
| 苡安 | [hackmd](https://hackmd.io/@L7K9-66lSeagS28AP0_GjQ/HJlAaewz0) |
| wei | [hackmd](https://hackmd.io/@xu7yoa5cSsqaron7h9XhUw/SkArkHvMA) |
|Lobinda|[HackMD](https://hackmd.io/bKtUIeYZTaSZubAzfPjl_Q)|
|william威良|[CodePen](https://codepen.io/snowman12320/pen/YzbKXao?editors=0010)|
|Tiya|[CodePen](https://codepen.io/Tiya_blank/pen/rNbQPbY)|
|jenny7532|[CodePen](https://codepen.io/wei-chen-wu/pen/vYwBLbz)|
| Chia Pin |[CodePen](https://codepen.io/joker-cat/pen/NWVKMwJ)|
| ej_chuang |[CodePen](https://codepen.io/EJChuang/pen/XWwrxLB)|
| william_hsu |[CodePen](https://codepen.io/william8815/pen/PovYxvO)|
| Hank |[CodePen](https://codepen.io/tw1720/pen/abrbOOy)|
| Aida |[CodePen](https://codepen.io/ada23410/pen/JjqjMqN?editors=0010)|
| runweiting |[CodePen](https://codepen.io/weiting14/pen/bGyNJeY)|
| mei| [CodePen](https://codepen.io/l_umei/pen/zYQGedq)|
| fabio20| [CodePen](連結) |