gpt4 book ai didi

javascript - $httpProvider.responseInterceptors 的替代方案

转载 作者:行者123 更新时间:2023-12-02 22:54:22 25 4
gpt4 key购买 nike

$httpProvider.responseInterceptors 在 AngularJS V1.3 中已停止使用,有什么替代方案?

我在 Angular JS 1.2 上使用的拦截器现在无法在 1.3 版上使用

var angularErrorHandling = angular.module('xx-http-error-handling', []);
angularErrorHandling.config(function ($provide, $httpProvider, $compileProvider) {
var elementsList = $();

push function to the responseInterceptors which will intercept
the http responses of the whole application
$httpProvider.responseInterceptors.push(function ($timeout, $q) {
return function (promise) {
return promise.then(function (successResponse) {
// if there is a successful response on POST, UPDATE or DELETE we display
// a success message with green background
if (successResponse.config.method.toUpperCase() == 'GET') {
var length = successResponse.data.length;
if (length == 0)
{
var countactivetoaster = $('#toast-container').find('.toast').length;
if (countactivetoaster == 0) {
toastr.warning('No Records Found!', '');
}
}
return successResponse;
}
else if (successResponse.config.method.toUpperCase() == 'PUT') {
toastr.success('Data Saved Sucessfully..', '');
return successResponse;
}
else if (successResponse.config.method.toUpperCase() == 'POST') {
toastr.success('Data Saved Sucessfully..', '');
return successResponse;
}
},
// if the message returns unsuccessful we display the error
function (errorResponse) {
switch (errorResponse.status) {
case 400: // if the status is 400 we return the error
toastr.error('400 error.', '');
// if we have found validation error messages we will loop through
// and display them
if (errorResponse.data.errors.length > 0) {
for (var i = 0; i < errorResponse.data.errors.length; i++) {
toastr.error('xx-http-error-validation-message', '');
}
}
break;
case 401: // if the status is 401 we return access denied
toastr.error('Wrong email address or password!', '');

break;
case 403: // if the status is 403 we tell the user that authorization was denied
toastr.error('You have insufficient privileges to do what you want to do!', '');
break;
case 500: // if the status is 500 we return an internal server error message
toastr.error('Error: <br />' +
errorResponse.data.exceptionMessage != null && errorResponse.data.exceptionMessage.length > 0 ? errorResponse.data.exceptionMessage :
errorResponse.data.message, '');
break;
default: // for all other errors we display a default error message
toastr.error('Error ' + errorResponse.status + ': ' + errorResponse.data.message, '');
}
return $q.reject(errorResponse);
});
};
});

$compileProvider.directive('httpErrorMessages', function () {
return {
link: function (scope, element, attrs) {
elementsList.push($(element));
}
};
});
});

最佳答案

您必须使用新的拦截器语法(在我看来,它更干净/更好):

你会发现,现在你可以分别处理 4 个拦截器:request、requestError、response、responseError

// register the interceptor as a service
$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
return {
// optional method
'request': function(config) {
// do something on success
return config;
},

// optional method
'requestError': function(rejection) {
// do something on error
if (canRecover(rejection)) {
return responseOrNewPromise
}
return $q.reject(rejection);
},



// optional method
'response': function(response) {
// do something on success
return response;
},

// optional method
'responseError': function(rejection) {
// do something on error
if (canRecover(rejection)) {
return responseOrNewPromise
}
return $q.reject(rejection);
}
};
});

$httpProvider.interceptors.push('myHttpInterceptor');

更多信息:https://docs.angularjs.org/api/ng/service/$http (拦截器篇)

关于javascript - $httpProvider.responseInterceptors 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23804981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com