特殊类型的$ resource请求错误的错误处理

时间:2015-04-23 16:35:55

标签: javascript angularjs angular-resource

我有一个工作的Angular应用程序,它通过我设置的$resource服务向REST API发出请求。一切都运作良好 - 我有成功和错误条件的回调,如果它是"预期"错误我有一个服务知道如何解析httpResponse以显示对用户有意义的消息 - HTTP代码,特殊应用程序错误代码等。

有一些类型的错误(未知服务器,在错误的环境中运行时出现与CORS相关的错误,服务器超时等),它们会触及错误处理回调函数,但似乎没有足够的数据给用户一个有意义的消息,或者它高度依赖于浏览器 - IE在messagedescription字段中有详细信息,但我在Chrome / Firefox中看不到任何类似内容。

在这些情况下,错误会显示在浏览器控制台中,但99.9%的用户永远不会打开控制台以查看特定消息,如:

XMLHttpRequest cannot load http://myserver/v1/job/submit. Request header field Content-Type is not allowed by Access-Control-Allow-Headers.

在Chrome / Firefox中,我在httpResponse对象中看到很多字段,例如config.dataconfig.headers等与我的请求相关的字段,但我找不到任何内容与我在控制台消息中看到的内容相关。

我有一个使用interceptor的建议,但是对于$resource来说,似乎拦截器只处理响应和响应错误,而且我已经处理了这两种情况 - 它没有'在我看来,使用拦截器会为其处理程序提供任何额外的信息。

错误是否只是在"范围之外" httpResponse或者在哪里可以找到它以便我可以向用户显示它?

$scope.submitJob = function(job) {

    $scope.submitting = true;

    jobService.submit({}, job,

        function (response) {
            $scope.submissionResponse = response;
            $scope.submitting = false;
            $scope.submitSuccess = true;
        },

        function (httpResponse) {
            // gets hit, but I don't see anything in it related to the CORS error
            // this will pop up a dialog showing the nature of the error, with whatever details can be determined from the httpResponse
            $rootScope.$broadcast('raise-error', { error: errorService.parse("Could not submit job", httpResponse) });
            $scope.submitting = false;
        }
    );

};

0 个答案:

没有答案