2017-01-22 54 views
1

我建立一個「安全」的應用和使用終極版,傳奇與fetchjs做異步調用後端在一起。自動處理與終極版,傳奇401響應,並獲取

我的後端返回401個狀態碼,當用戶沒有被授權,我要趕這個「例外」全球和派遣行動,所以我的反應申請進入登錄畫面。

我發現了以下解決方案:https://github.com/redux-saga/redux-saga/issues/110,但在這種情況下爲401的處理應該在每一個我們建立的傳奇是明確的。

通過將代碼添加到每一個傳奇就變得更加複雜。它也增加了開發人員忘記添加處理401代碼的代碼的機率。

有沒有一種很好的方法來處理全球的401響應?

回答

2

我不會用redux-saga,因爲它沒有這樣做,你需要什麼樣的能力。

相反,設立專賣店,API層和其他東西的時候配置API層調用做處理上發生的每個錯誤。

報告API層的示例調用錯誤處理程序。

const conf = { 
    onError:() => {}, 
} 

api.onError = (cb) => { 
    conf.onError = cb; 
} 

api.get = (url) => { 
    fetch(url) 
     .then(response => { 
      if (response.ok === false) { 
       return conf.onError(response); 
      } 
      return response; 
     }) 
     // Network error 
     .catch(conf.onError) 
} 

配置應用程序。

import store from './store'; 

// Configure your API wrapper and set error callback which will be called on every API error. 
api.onError((error) => { 
    store.dispatch({ 
     type: 'API_ERROR', 
     payload: error, 
    }); 
}); 

// In you reducers... 
isAuthorized(state, action) { 
    if (action.type === 'API_ERROR' && action.payload.statusCode === 401) { 
     return false; 
    } 
    return state; 
} 

然後,調用API爲通常情況下,如果發生錯誤,動作被分配到存儲,你可能會或可能不會對這一行動作出反應。