使用带有Restangular的错误拦截器重试REST调用

时间:2015-01-16 19:57:08

标签: angularjs restangular

我想在Restangular 1.4.0的某些条件下重试一个调用。所以我在文档中设置了setErrorInterceptor。它可以工作,但第一次调用的then子句不会被执行。 responseHandler在错误拦截器中返回undefined

我的客户代码:

Restangular.setErrorInterceptor(function (response, deferred, responseHandler) {
    console.log('error interceptor');
    console.log(response.status);
    if (response.status === 403) {
        //refreshAccesstoken().then(function() {
        //  // Repeat the request and then call the handlers the usual way.
        //  $http(response.config).then(responseHandler, deferred.reject);
        //  // Be aware that no request interceptors are called this way.
        //});

        return false; // error handled
    } else if (response.status === 401) {
        return $http.get('http://192.168.0.27:3000/auth/guest').then(function (result) {
            var token = result.data.token;
            Auth.setToken(token);
            response.config.headers.Authorization = 'Bearer ' + Auth.getToken();
            console.log(responseHandler);
            //response.config.headers["Authorization"] =  Auth.getToken();
            $http(response.config).then(responseHandler, deferred.reject);
            //return token;
            return false;
        });
        //$http(response.config).then(responseHandler, deferred.reject);

    }
    console.log('error not handled');
    return true; // error not handled
});

Dashboards.post()
    .then(function (result) {
        console.log(result);
        return Restangular.oneUrl('newDash', result.data).get();
    }, function (response) {
        console.log("Error with status code", response.status);
    })
    .then(function (result) {
        console.log(result);
    });

我的服务器日志:

POST /api/v1/dashboards HTTP/1.1" 401
GET /auth/guest HTTP/1.1" 200
POST /api/v1/dashboards HTTP/1.1" 201

2 个答案:

答案 0 :(得分:0)

而不是responseHandler我使用此代码:deferred.resolve作为第一个参数: $http(response.config).then(deferred.resolve, deferred.reject);

答案 1 :(得分:-1)

如果您正在从其他域/主机访问REST API,那么您就遇到了CORS问题。

JavaScript(包括AngularJS)不允许在自己的域外发出请求,除非服务器已明确允许,并且您的脚本专门要求访问。

这个StackOverflow问题实际上回答了我的问题,它现在连接到我的REST服务:

Restangular crossdomain request. What I do wrong?