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