iT邦幫忙

0

Day 17 | 重構:用 Router 拆檔,加上統一錯誤處理

  • 分享至 

  • xImage
  •  

今天沒有新增任何功能,目標是整理程式碼:把待辦事項的路由搬到獨立檔案,並加上統一的錯誤處理。

今天做的事
新增 routes/todos.js,用 express.Router() 把所有待辦事項相關的路由搬過去,server.js 只留下 Middleware 設定和一行:

app.use('/api/todos', todosRouter);

另外加了兩個收尾的 Middleware:/api 底下找不到路徑時回傳 JSON 格式的 404,以及一個有四個參數的錯誤處理 Middleware:

app.use((err, req, res, next) => {
  console.error(err.message);
  const status = err.status || 500;
  res.status(status).json({
    message: status === 400 ? '請求格式錯誤' : '伺服器發生未預期的錯誤'
  });
});

觀察

  • 搬進Router之後,路由路徑是相對於掛載點的。router.get('/')實際對應/api/todos,router.get('/:id')對應/api/todos/:id,重複寫/api/todos反而會變成/api/todos/api/todos
  • Express靠參數數量判斷一個函式是不是錯誤處理Middleware,有四個參數(多了最前面的err)才算。少寫一個參數,它就變成普通的Middleware,錯誤進不來
  • 以前遇到壞掉的JSON,Express會直接回傳一整頁HTML的錯誤訊息,前端還要想辦法解析。加上錯誤處理後,全部統一成JSON格式
  • 重構最重要的驗收標準是:畫面和功能完全沒變,只有程式碼結構變了。我把前面所有功能(新增、篩選、編輯、完成、刪除、統計)都重新點過一輪,確認行為一致
  • 順便把第三天練習用的 /about、/success、/notfound路由刪掉了,它們的任務早就完成了

心得
重構的成就感很安靜,因為畫面看起來完全沒變。但打開server.js從一百多行變成不到四十行,要找哪支API也知道去routes/todos.js,之後要加功能會輕鬆很多。這也是第一次體會到程式碼不只是能跑,還要讓未來的自己看得懂。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言