在自定义请求转换器中格式化日期

时间:2015-07-30 17:06:40

标签: angularjs angularjs-provider angularjs-config

我是AngularJS的新手,我以大约100英里每小时的速度超速行驶。我正试图从angularjs网站调用RESTful服务。 RESTful服务使用NH-HMAC身份验证方案。服务期望的部分HMAC256哈希是一个类似于星期三,2015年7月29日15:00:00 GMT 的日期。

由于对RESTful服务的每个请求都需要此方案,因此我尝试创建自定义请求转换器以将哈希添加到请求标头。我被困的地方是我不能将$ filter服务注入添加请求转换器的配置中。我已经尝试创建一个提供程序,它在提供程序的$ get结果中返回formatDate函数。但是,当我尝试调用它时,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;
});
}]);

0 个答案:

没有答案