401狀態碼
:
axios向伺服器端傳送請求時有兩種情況會出現401狀態碼(unauthorized未授權):
服務端要求傳遞token資訊,而實際沒有傳遞。
有傳遞token到達伺服器端,但由於時間比較久,這個token在伺服器中已經過期了(伺服器儲存token有效期時間為2個小時)。
總之,伺服器端有些api介面要求傳遞token,token失效或沒有傳遞,就會報401錯誤。
第1種情況,可以在axios請求***中做token傳遞操作。
第2種情況,之前是這樣處理的,在axios響應***中判斷請求狀態如果是401,就強制使用者重新登入系統
這樣處理使用者體驗非常不好,現在做一次公升級優化處理。
伺服器端返回兩個秘鑰資訊,它們在服務端都有使用時效:
token
有效期2小時。
refresh_token
有效期14天,refresh_token用於在token過期後,重新獲取並重新整理token時效使用的。
針對第2種401狀態碼處理步驟為:
判斷refresh_token是否存在
不存在就直接重新登入。
存在,axios發起請求,帶著refresh_token請求服務端,獲取新token出來:
成功:對vuex和localstorage進行token資訊更新。
失敗:清空無效使用者資訊,直接重新登入。
示例**1
:
// 響應*** (響應成功:剝離無效資料,響應失敗:重新整理token)
instance.interceptors.response.
use(res =>
catch(e
)},async err =>
= store.state
// 如果沒有token沒登入 如果沒有refresh_token無法重新整理tokenif(
!user.token ||
!user.refresh_token)
// 重新整理token,發請求,沒有配置的axios,自己配置refresh_token
const res =
await
axios(`
}})// token獲取 res.data.data.token
// 更新 vuex 和 本地 token
store.
commit
('setuser',)
// 繼續傳送剛才錯誤的請求
// instance()
// err錯誤物件 包含(response 響應物件 |config 請求配置)
return
instance
(err.config)}}
catch(e
)return promise.
reject
(err)
})
演示**:promise錯誤處理
:
示例**2
:
import store from
'@/store'
// 引入vuex中的store例項
import router from
'@/router'
// 引入路由物件例項
……// 響應***
instance.interceptors.response.
use(
function
(response)
catch
(error)}
,async
function
(error)
}// 跳轉物件
// 如果refresh_token不存在if(
!store.state.user.refresh_token)
try`
}})// 獲取到新token後,就對vuex和localstorage進行更新
store.
commit
('updateuser',)
return
instance
(error.config)
// 把剛才錯誤的請求再次傳送出去 然後將promise返回
}catch
(err)}
return promise.
reject
(error)})
')// 所有的使用者資訊清空
router.
push
(topath)
// 跳轉到回登入頁
return promise.
reject
(err)}}
return promise.
reject
(error)
})
處理HTTP狀態碼
1.1.4 處理http狀態碼 回車,獲得響應狀態碼 http狀態碼表示http協議所返回的響應的狀態。比如客戶端向伺服器傳送請求,如果成功地獲得請求的資源,則返回的狀態碼為200,表示響應成功。如果請求的資源不存在,則通常返回404錯誤。http狀態碼通常分為5種型別,分別以1 5五個數字開頭,由...
Scrapy處理異常狀態碼
當爬取頁面狀態碼是異常狀態碼,但response是正常的時候,正常情況scrapy框架會判斷狀態碼,如果不是正常狀態碼會停止後續操作。raise httperror response,ignoring non 200 response 通過上面 可以看出,如果在請求一些頁面狀態碼異常,但respon...
117 狀態碼錯誤處理
在一些 開發中,經常會需要捕獲一些錯誤,然後將這些錯誤返回比較優美的介面,或者是將這些錯誤的請求做一些日誌儲存。1.404 伺服器沒有指定的url。3.405 請求的method錯誤。4.400 bad request,請求的引數錯誤。5.500 伺服器內部錯誤,一般是 出bug。6.502 一般是...