我的应用程序使用passport
进行身份验证。
当用户无法访问特定路由时,这会给我一个403
,这也包括api路由。
即
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
});
}
当我到达错误部分时,如何重定向到另一条路线?
请注意,此文件是服务文件,getAll
组件调用React
方法:
loadCalendar: function () {
var self = this;
calendarService.getAll()
.then(function (data) {
self.props.load(data);
});
},
我知道我可以在loadCalendar
函数中执行此操作,但这意味着每当我调用任何服务时,我都需要包含error
块,我更愿意拥有它集中在service
个文件中。
答案 0 :(得分:0)
因此,对于那些想要解决这个问题的人来说,我是在不久前找到的。
首先,您需要在Router
组件中添加React
。
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);
}
//.........