# 🏅 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 連結貼至底下回報就算完成了喔! 解答位置請參考下圖(需打開程式碼的部分觀看)  <!-- 解答: 運行 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](連結) |
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up