2017-01-22 43 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为通常情况下,如果发生错误,动作被分配到存储,你可能会或可能不会对这一行动作出反应。