config
这个要从config的正确使用说起,也许你想在config某个provider的时候注入$rootscope, 但是这是不允许的,我们细看下面的特性
session注入
每个请求自带sessionid,要实现这种功能就要用到,而不是用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