angularjs的config和interceptor

config

这个要从config的正确使用说起,也许你想在config某个provider的时候注入$rootscope, 但是这是不允许的,我们细看下面的特性

session注入

每个请求自带sessionid,要实现这种功能就要用到interceptor,而不是用config配置ng-resource往里面添加参数 - config是在服务加载前提供配置参数个性化服务实例

    
    angular.module("secu.services")

    .factory('HttpInterceptor', ['$q', '$state',
        function($q, $state) {
            return {
                request: function(config) {
                    // config.headers['x-session-token'] = localStorage.getItem('sessionid');
                    if (localStorage.getItem('sessionid')) {
                        //1. post data
                        // config.data=config.data||{};
                        // config.data['session_id'] = localStorage.getItem('sessionid');
                        
                        //2. get parameters
                        config.params=config.params||{};
                        config.params['session_id'] = localStorage.getItem('sessionid');
                    }
                    // console.log('config: ',config);
                    return config;
                },
                requestError: function(err) {
                    return $q.reject(err);
                },
                response: function(res) {
                    if (res.data && res.data.code) {
                        switch (res.data.code) {
                            case '000':
                                return res
                            case '100':
                                alert(res.data.msg)
                                return res
                            case '200':
                                console.log(res.data.msg)
                                $state.go('login')
                                break
                        }
                    }

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

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


### x-session-token in header 现在多数网站都是用token作为认证,而非cookiebase的sessionid
原文地址:https://www.cnblogs.com/wancy86/p/ngdi.html