我有一个工作的Angular应用程序,它通过我设置的$resource
服务向REST API发出请求。一切都运作良好 - 我有成功和错误条件的回调,如果它是"预期"错误我有一个服务知道如何解析httpResponse
以显示对用户有意义的消息 - HTTP代码,特殊应用程序错误代码等。
有一些类型的错误(未知服务器,在错误的环境中运行时出现与CORS相关的错误,服务器超时等),它们会触及错误处理回调函数,但似乎没有足够的数据给用户一个有意义的消息,或者它高度依赖于浏览器 - IE在message
和description
字段中有详细信息,但我在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.data
,config.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;
}
);
};