প্রমাণীকরণ হ্যান্ডেল করার জন্য আমি আমার AngularJS অ্যাপ্লিকেশনটির জন্য একটি HTTP ইন্টারসেপ্টর লেখার চেষ্টা করছি।
এই কোডটি কাজ করে, তবে আমি নিজে থেকেই কোনও পরিষেবা ইনজেকশনের বিষয়ে উদ্বিগ্ন যেহেতু আমি ভেবেছিলাম যে কৌনিকটি স্বয়ংক্রিয়ভাবে এটি পরিচালনা করবে:
app.config(['$httpProvider', function ($httpProvider) {
$httpProvider.interceptors.push(function ($location, $injector) {
return {
'request': function (config) {
//injected manually to get around circular dependency problem.
var AuthService = $injector.get('AuthService');
console.log(AuthService);
console.log('in request interceptor');
if (!AuthService.isAuthenticated() && $location.path != '/login') {
console.log('user is not logged in.');
$location.path('/login');
}
return config;
}
};
})
}]);
আমি যা করতে শুরু করেছিলাম তা কিন্তু বিজ্ঞপ্তি নির্ভরতা সমস্যার মধ্যে পড়ে:
app.config(function ($provide, $httpProvider) {
$provide.factory('HttpInterceptor', function ($q, $location, AuthService) {
return {
'request': function (config) {
console.log('in request interceptor.');
if (!AuthService.isAuthenticated() && $location.path != '/login') {
console.log('user is not logged in.');
$location.path('/login');
}
return config;
}
};
});
$httpProvider.interceptors.push('HttpInterceptor');
});
আমার উদ্বেগ হওয়ার আরেকটি কারণ হ'ল কৌণিক ডক্সের $ http এর বিভাগটি এইচটিপি ইন্টারসেপ্টারে "নিয়মিত উপায়ে" ইনজেকশনের জন্য কোনও উপায় দেখায় বলে মনে হয়। "ইন্টারসেপ্টর" এর অধীনে তাদের কোড স্নিপেট দেখুন:
// register the interceptor as a service
$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
return {
// optional method
'request': function(config) {
// do something on success
return config || $q.when(config);
},
// optional method
'requestError': function(rejection) {
// do something on error
if (canRecover(rejection)) {
return responseOrNewPromise
}
return $q.reject(rejection);
},
// optional method
'response': function(response) {
// do something on success
return response || $q.when(response);
},
// optional method
'responseError': function(rejection) {
// do something on error
if (canRecover(rejection)) {
return responseOrNewPromise
}
return $q.reject(rejection);
};
}
});
$httpProvider.interceptors.push('myHttpInterceptor');
উপরের কোডটি কোথায় যাওয়া উচিত?
আমার ধারণা আমার প্রশ্নটি এটি করার সঠিক উপায় কী?
ধন্যবাদ, এবং আমি আশা করি আমার প্রশ্নটি যথেষ্ট পরিষ্কার ছিল।
$http
। এর চারপাশের একমাত্র উপায়টি আমি ব্যবহার করেছি $injector.get
, তবে এটি এড়াতে কোডটি গঠনের ভাল উপায় আছে কিনা তা জেনে রাখা ভাল।