Форматирование даты в преобразователе пользовательских запросов
Я новичок в AngularJS, и я достигаю скорости около 100 миль в час. Я пытаюсь вызвать службу RESTful с сайта angularjs. Служба RESTful использует схему аутентификации NH-HMAC. Часть хеша HMAC256, которую ожидает служба, представляет собой дату, отформатированную аналогично ср., 29 июля 2015 г., 15:00:00 по Гринвичу.
Так как каждый запрос к службе RESTful ожидает эту схему, я пытаюсь создать собственный преобразователь запроса, чтобы добавить хэш в заголовок запроса. Я застрял в том, что не могу вставить сервис $ filter в конфигурацию, добавив преобразователь запросов. Я пытался создать провайдера, который возвращает функцию formatDate в $ get результате провайдера. Однако, когда я пытаюсь вызвать его, angular терпит неудачу и говорит мне, что formatDate не является функцией.
Ниже приведен код angularjs, который у меня есть. У кого-нибудь есть предложения или примеры того, как этого добиться? Есть ли лучший способ, или я шланг?
Спасибо
var myApp = angular.module('myApp', []);
myApp.provider('dateFormat', function() {
this.$get = ['$filter', function($filter) {
return {
formatDate: function(date) {
return $filter('date')(date, "EEE, dd MMM yyyy HH:mm:ss 'GMT'");
}
}
}]
});
myApp.config(['$httpProvider', 'dateFormatProvider', function ($httpProvider, dateFormatProvider) {
// Add an HTTP interceptor which passes the request URL to the transformer
// Allows to include the URL into the signature
// Rejects request if no hmacSecret is available
$httpProvider.interceptors.push(function($q) {
return {
'request': function(config) {
config.headers['X-URL'] = config.url;
return config || $q.when(config);
}
};
});
// Add a custom request transformer to generate required headers
$httpProvider.defaults.transformRequest.push(function (data, headersGetter) {
var content = data ? data : '';
var secret = 'secret-key-goes-here';
var path = headersGetter()['X-URL'];
var d1 = new Date();
var dateStr = dateFormatProvider.formatDate(d1);
var contentHash = CryptoJS.HmacMD5(content, secret);
headersGetter()['Authorization'] = CryptoJS.HmacSHA256('GET-' +path +'-' +dateStr + '-' + contentHash, secret).toString(CryptoJS.enc.Base64);
headersGetter()['X-URL'] = '';
return data;
});
}]);