Angular - 如何正确处理来自服务器的HTTP错误?

时间:2015-06-10 19:21:21

标签: angularjs angular-http

目前我已经得到了这个:

$http({
    method: 'POST',
    url: 'http://api-endpoint/somescript/',
    data: formData,
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
})
.then(function (response) {
    console.log(response);
});

如果另一端的脚本运行正常,则会调用then。但是,让我们说服务器端的脚本存在某种错误,而这些错误没有被正确捕获。如果我通过抛出像asdfasdf()之类的垃圾调用来弥补错误,则不会调用then函数,而是在浏览器控制台中获取此函数:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading
the remote resource at http://api-endpoint/somescript/. (Reason: CORS
header 'Access-Control-Allow-Origin' missing).

如何在Angular代码中捕获它,以便以用户友好的方式处理它?<​​/ p>

编辑:这不是重复,因为它特定于Angular。

2 个答案:

答案 0 :(得分:1)

为了解决这个问题,我们必须添加一个服务/工厂来拦截http调用。您可以在配置

中这样做
$httpProvider.interceptors.push('httpRequestInterceptor'); 

现在,上述服务将是这样的

angular.module("app").factory('httpRequestInterceptor', function ($q) {

            return {
                'request': function (config) {

                    // Extract request information
                    return config || $q.when(config);
                },
                'responseError': function(rejection) {

                    // Extract response error information and handle errors
                    return $q.reject(rejection);
                 }
             }
        });

答案 1 :(得分:1)

$q.then()方法接受三个函数参数,第一个是成功回调的处理程序,第二个是错误,第三个是notify。 $http在幕后使用$q,因此thenable的行为应与文档建议的相同。

要处理上述代码中的错误,只需投入一个额外的函数进行错误处理:

.then(function (response) {
    console.log(response);
}, function(response) {
    console.log(response);
});

欢迎浏览$q文档,特别是The Promise API,了解更多详情。