我想在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
答案 0 :(得分:0)
而不是responseHandler
我使用此代码:deferred.resolve
作为第一个参数:
$http(response.config).then(deferred.resolve, deferred.reject);
答案 1 :(得分:-1)
如果您正在从其他域/主机访问REST API,那么您就遇到了CORS问题。
JavaScript(包括AngularJS)不允许在自己的域外发出请求,除非服务器已明确允许,并且您的脚本专门要求访问。
这个StackOverflow问题实际上回答了我的问题,它现在连接到我的REST服务: