串接 API -- try catch 練習


Posted by estella00911 on 2021-05-15

 1. const request = require('request')
 2. 
 3. url = 'https://lidemy-book-store.herokuapp.com/books' // 也可以設成API_ENDPOINT
 4. 
 5. request( url, listTenBooks)
 6. 
 7. function listTenBooks(error, response, body) {
 8.   /* request() 出錯:通常是發送的過程有問題,然後沒有接到任何回應。 */
 9.   if (error) { 
10.   console.log(`請求錯誤: ${error}`)
11.   return
12.   }
13. 
14.   // 程式碼先處理Status Code 的4xx 5xx,都順利
15.   if (response.statusCode >=300) {
16.     console.log(`請求錯誤,狀態碼:${response.statusCode}`)
17.     return
18.   }
19. 
20.   /* 處理 API Link 的資料:有沒有抓到 API 文件 */
21.   let json = {};
22.   try {
23.     json = JSON.parse(body) // 把 json 格式的字串 -> JavaScript 的 object 形式
24.   } catch (error) {
25.     console.log('error!!! 資料解析錯誤')
26.     console.log('ERROR:', error)
27.     return
28.   }
29. 
30.   /* 印出書目上有哪些書 */
31.   for (let i = 0; i < 10; i++) {
32.     console.log(json[i].id, json[i].name)
33.   }
34. }

後記整理:

catch error 的地方有三個:
  1. request() 有沒有給出錯誤
  2. 發出 request 後,得到的 response statuscode 有沒有 4xx 5xx
  3. 有沒有順利抓到資料:json.parse 有沒有出錯

Q1: request() 給出錯誤與 Status Code 4xx 5xx 錯誤不一樣。

Ans.
request() 給出錯誤:通常是在發送的過程有問題,然後沒有接到任何回應。
Status Code 4xx 5xx 錯誤: request 有發送出去,然後 response 得到的 status code


Q2: try catch 不用列出可能是哪些問題

問題描述:先前在 line 30 上列出 json.parse 轉換錯誤的問題:可能是 API 不符合 json 格式或者無法使用 API 文件內的資料,可能是沒有權限訪問該頁面或瀏覽器本版錯誤等問題
Ans.
通常都是列出 error,再個別自己去找 statusCode 顯示的問題。
舉例是 status code 4xx 5xx 有很多問題要處理,不用一一列出來,使用 console.log('ERROR!!:', response.statusCode) 即可


Q3: 可以跑到這個 parsing 的地方代表一定有抓到資料,如果有權限或是其它問題的話應該是要在上面提到 Status Code 的地方處理
24. catch (error) { 
      console.log('  (2) 網址有效,但無法使用 API 文件內的資料,可能是沒有權限訪問該頁面或瀏覽器本版錯誤等問題')')}

Ans.
所以處理優先順序
(1) <line 15~17> statusCode 判讀 400 500, console.log(statuscode) 後 return 結束 function
(2) <line 22~28> json.parse 抓資料


#API #Try Catch







Related Posts

簡易 Regular Expression 入門指南

簡易 Regular Expression 入門指南

[ Vue筆記 ] 計算屬性 computed 的使用

[ Vue筆記 ] 計算屬性 computed 的使用

2022 Node.js直播班心得

2022 Node.js直播班心得


Comments