【发布时间】:2016-04-01 18:12:16
【问题描述】:
我一直在关注这篇文章http://www.webdeveasy.com/interceptors-in-angularjs-and-useful-examples/ 来制作一个拦截器,它可以为我的所有请求添加一个基于服务器的令牌。我在 js 文件中编写了以下代码。在下面的文件中,SessionHolder 是一个在登录时存储令牌的文件。但目前我正在对文本进行硬编码。
(function (module) {
module.factory('sessionManager', ['sessionHolder', function (sessionHolder) {
console.log("Reached sessionManager");
var sessionManager = {
request: function (config) {
//if (sessionHolder.validation_capability) {
config.headers['x-session-token'] = 'saurabh';
config.headers['baap'] = 'saurabh';//sessionHolder.AuthorisationToken;
//}
return config;
}
};
return sessionManager;
}]);
}(angular.module("MarketPlan")));
“MarketPlan”是我的 ng-app。
现在在 app.js 文件中,我正在执行以下操作:
(function (app) {
app.config(function ($stateProvider, $urlRouterProvider, $mdThemingProvider, datepickerPopupConfig, datepickerConfig, $httpProvider) {
// override defaults for date picker
datepickerPopupConfig.showButtonBar = false;
datepickerConfig.showWeeks = false;
//guiding initial routes
$urlRouterProvider.otherwise(document.cookie.indexOf('main=1') !== -1 ? '/home' : '/business');
//setting theme configs
$mdThemingProvider.definePalette('grey', {
'50': 'eeeeee',
'100': 'ffffff',
'200': 'ffffff',
'300': 'ffffff',
'400': 'ffffff',
'500': 'ffffff',
'600': 'ffffff',
'700': 'ffffff',
'800': 'ffffff',
'900': 'ffffff',
'A100': 'ffffff',
'A200': 'ffffff',
'A400': 'ffffff',
'A700': 'ffffff',
'contrastDefaultColor': 'dark',
'contrastDarkColors': ['50', '100', '200'],
'contrastLightColors': undefined
});
// I am trying to push the custom interceptor here, as the article says it needs //to be done in the app config
$httpProvider.interceptors.push('sessionManager');
});
}(angular.module("MarketPlan", ["my dependencies here"])));
使用此代码,我会在应用程序启动后立即收到 Unknown Session Provider 错误。
我无法弄清楚为什么会发生这种情况。仅供参考,我的理解是拦截器(工厂)应该在您的应用程序中注册。这个拦截器的名字应该被推入配置中的 $httpProvider 拦截器数组中(即当应用程序启动时)。
这是正确的理解吗??这里有没有按时间顺序完成的事情。
请指导我。
【问题讨论】:
-
你能用你的代码发布到codepen或JSbin的链接吗?
-
如果
sessionHolder不存在,它可能会失败
标签: angularjs http angular-http-interceptors