APIにリクエストを送信しており、AngularJS $ resourceモジュールを使用しています。 $ httpとは異なるため、エラーの処理方法がわかりません。
私のサービス:
var appServices = angular.module('app.services', ['ngResource']);
appServices.factory('Category', ['$resource',
function($resource){
return $resource('/apicategoryerr/?format=:format', {}, {
query: {
method: 'GET',
params: { format: 'json'},
isArray: true,
}
});
}]);
私のコントローラー:
...
Category.query(function(data) {
console.log(data);
});
...
私はこのようなものが欲しいか..私のAPIが機能していない場合にエラーを処理する方法がわかりません。
Category.query().success(function() {
console.log('success');
}).error(function() {
console.log('error');
});
エラーハンドラを2番目のパラメータとしてquery
に渡すことができます。
Category.query(function(data) {}, function() {});
編集:
物事を少し明確にするために、いくつかの例:
var Resource = $resource('/restapi/resource');
Resource.query(function(data) {
// success handler
}, function(error) {
// error handler
});
Resource.query({
'query': 'thequery'
},function(data) {
// success handler
}, function(error) {
// error handler
});
Resource.query().$promise.then(function(data) {
// success handler
}, function(error) {
// error handler
});
Resource.query({
'query': 'thequery'
}).$promise.then(function(data) {
// success handler
}, function(error) {
// error handler
});
エラー関数にリンクされたinterceptor
プロパティを持つメソッドの説明にresponseError
オブジェクトを追加することにより、リソースの作成ステップでエラーハンドラを定義できます。
function resourceErrorHandler(response) { ... }
$resource('/path/:param/', {} ,
{
'get': {method:'GET',
interceptor : {responseError : resourceErrorHandler}},
'save': {method:'POST'},
'query': {method:'GET', isArray:true,
interceptor : {responseError : resourceErrorHandler}},
'remove': {method:'DELETE'},
'delete': {method:'DELETE'}
};
ここで、resourceErrorHandler
は、getメソッドまたはqueryメソッドの各エラーで呼び出される関数です。要求された問題については、getメソッドのみが必要です。もちろん、それをあらゆるアクションに適用できます。
他のインターセプターresponse
が$ resourceに存在し、通常の応答をキャッチします。
{'get': {method:'GET', interceptor : {response : resourceResponseHandler}},
インターセプターは$http
モジュールの一部であり、さらに ドキュメントでそれらについて読む ができます。
Ng.resourceの新しいES6の例(TypeScriptを使用)
resolve: {
detail: function (myService, $stateParams) {
return myService.getEventDetail({ id: $stateParams.id }).$promise.then(data => data, error => false );
}
}
そして、コントローラーでは、コントローラーに注入された「詳細」がデータに解決されるか(良好)、エラーの場合はfalseになり、404の表示を処理します。