首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ajax调用的React reroute

ajax调用的React reroute
EN

Stack Overflow用户
提问于 2016-08-23 17:03:47
回答 1查看 168关注 0票数 0

我的应用程序有一个使用passport的身份验证端。当用户无法访问特定的路由时,这将给我一个403返回,这也包括api路由。

代码语言:javascript
复制
app.use('/api/calendar', passport, authorize([roles.SOME_ROLE]), calendar);

稍后,我调用此api/calendar路由来获得如下日历:

代码语言:javascript
复制
var getAll = function () {
    return $.get(routes.MAIN + routes.GET_CALENDAR)
            .error(function(error) {
                 //this is where I am stuck
            });
}

当我到达错误部分时,如何重定向到另一个路由?

请注意,此文件是一个服务文件,从React组件调用getAll方法:

代码语言:javascript
复制
loadCalendar: function () {
            var self = this;
            calendarService.getAll()
                .then(function (data) {
                    self.props.load(data);
                });
        },

我知道我可以在这个loadCalendar函数中做到这一点,但这意味着每当我调用任何服务时,我都需要包含一个error块,并且我更喜欢将它集中在service文件中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-26 15:41:20

所以,对于试图弄清楚这一点的人来说,我在一段时间前找到了它。

首先,您的React组件中需要有一个Router

代码语言:javascript
复制
var withRouter = require('react-router').withRouter;
var SomeComponent = withRouter(
    React.createClass({
        PropTypes: {
        },
        .........

接下来,我们设置我们的服务以便能够调用Router

代码语言:javascript
复制
var router = null;
var setRouter = function (routerToSet) {
    router = routerToSet;
}
//..... other stuff

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

现在,我们可以在发生Ajax错误时调用要重定向的路由器

代码语言:javascript
复制
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

代码语言:javascript
复制
//.........
        getInitialState: function () {
            unitPlantService.setRouter(this.props.router);
        }
//.........
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39096830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档