2016-08-23 6 views
0

passportを使用しているアプリケーションの認証側があります。 これは私に403を返します。ユーザーが特定のルートにアクセスできない場合、これにはapiルートも含まれます。ajax呼び出しでリルートを返す

すなわち

app.use('/api/calendar', passport, authorize([roles.SOME_ROLE]), calendar); 

後、私はそうのようなカレンダーを取得するには、このapi/calendarルートを呼び出す:私はエラー部分に到達したときに

var getAll = function() { 
    return $.get(routes.MAIN + routes.GET_CALENDAR) 
      .error(function(error) { 
       //this is where I am stuck 
      }); 
} 

がどのように私は、別のルートにリダイレクトしますか?

loadCalendar: function() { 
      var self = this; 
      calendarService.getAll() 
       .then(function (data) { 
        self.props.load(data); 
       }); 
     }, 

私はこのloadCalendar機能でそれを行うことができます知っているが、それはいつでも私がやることを意味する:このファイルは、getAll方法がReactコンポーネントから呼び出されるサービスファイルがあることを

注意私はerrorブロックを含める必要があり、それをserviceファイルに集中させたいと思っているサービスに電話してください。

答えて

0

だから、これを理解しようとしている人には、私は以前にそれを見つけました。

まず、ReactコンポーネントにRouterが必要です。

var withRouter = require('react-router').withRouter; 
var SomeComponent = withRouter(
    React.createClass({ 
     PropTypes: { 
     }, 
     ......... 

次に、Routerを呼び出すことができるようにするため、私たちのセットアップ当社のサービス:

var router = null; 
var setRouter = function (routerToSet) { 
    router = routerToSet; 
} 
//..... other stuff 

module.exports: { 
//..... 
setRouter: setRouter 
} 

今、私たちは、呼び出すことができます - Ajaxエラーに - ルータを

function handleErrorResponse(error, router) { 
    if(error.status == statusCodes.UNAUTHORIZED) { 
     if(router) { 
      router.replace(unauthorizedPath); 
     } 
     else { 
      toastr.error("Router not defined", "CRITICAL ERROR"); 
      throw new Exception("CRITICAL ERROR: Router not defined");    
     } 
    } 
    else { 
     return error; 
    } 
} 


function handleError(error) { 
    return handleErrorResponse(error, router); 
} 

var myAjaxCallToHandle= function() {  
    return $.ajax({ 
     url: routes.where_ever, 
     data: JSON.stringify(data), 
     method: "POST", 
     contentType: "application/json" 
    }) 
    .error(handleError); 
} 

リダイレクトします残っていることは、コンポーネントでは、カップルであることです。Router

//......... 
     getInitialState: function() { 
      unitPlantService.setRouter(this.props.router); 
     } 
//......... 
関連する問題