浅析angularjs http拦截器

来公司接近一个月了,今天在自学的过程中对网页中的载入界面产生了好奇,查阅了几篇博客后发现是与http拦截器有关,写这篇文章做出梳理,方便日后查看也与大家探讨。

参考链接:https://www.cnblogs.com/ifykwf/p/6043459.html

对于拦截器的定义,在这里我就不赘述了,大体就是在request前,和response后截断请求响应信息做预处理功能,例如:添加加载页面,验证请求人身份,加入token等。angularjs中$http的拦截是由$httpProvider服务提供的。其提供有四种方法,分别为:

 request: function (config) {
            console.log(config)
            return config;
        },
        requestError: function (err) {
            return $q.reject(err);
        },
        response: function (res) {
            console.log(res)
            return res;
        },
        responseError: function (err) {
            if (-1 === err.status) {
                // 远程服务器无响应
            } else if (500 === err.status) {
                // 处理各类自定义错误
            } else if (501 === err.status) {
                // ...
            }
            console.log($q.reject(err))
            return $q.reject(err);
        }

以上的四种方法分别对应请求成功失败,响应成功失败。看似挺简单的操作,但是我在学习的过程中也遇到了许多的坎,现与大家一起分享。

正确:

app.service('HttpInterceptor',function ($q) {
            return  {
                request: function (config) {
                    console.log(config)
                    return config;
                },
                requestError: function (err) {
                    return $q.reject(err);
                },
                response: function (res) {
                    console.log(res)
                    return res;
                },
                responseError: function (err) {
                    if (-1 === err.status) {
                        // 远程服务器无响应
                    } else if (500 === err.status) {
                        // 处理各类自定义错误
                    } else if (501 === err.status) {
                        // ...
                    }
                    return $q.reject(err);
                }
            }
    })

以上是一段正确封装的HttpInterceptor服务,经过我的验证是没有问题的。以下看另一端类似的错误代码。

错误:

app.factory('HttpInterceptor',function ($q) {
        return {
            HttpInterceptor:function(){
                return {
            request: function (config) {
                console.log(config)
                return config;
            },
            requestError: function (err) {
                return $q.reject(err);
            },
            response: function (res) {
                console.log(res)
                return res;
            },
            responseError: function (err) {
                if (-1 === err.status) {
                    // 远程服务器无响应
                } else if (500 === err.status) {
                    // 处理各类自定义错误
                } else if (501 === err.status) {
                    // ...
                }
                return $q.reject(err);
            }
        }
        }
        }
    });

再补上我的配置模块如下:

module.config(['$httpProvider',function ($httpProvider) {
           $httpProvider.interceptors.push('Httpinterceptor');
}]);

博主思考了很久才发现端倪,问题是在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值