AngularJS - 如何对所有jsons请求进行deflate和编码/解码到base64?

Jak*_*har 8 base64 json http deflate angularjs

让我说我的角度应用程序周围有几个$资源和一些$ http:

myApp.factory('Note', function($resource) {

  return $resource('http://', {id: '@id'}, 
    { 'index': { method: 'GET', isArray: true },
      'update': { method: 'PUT'},
    });
  });
Run Code Online (Sandbox Code Playgroud)

与控制器

myApp.controller('NotesController',function NotesController($scope, Note, AuthenticationService) {

$scope.notes = Note.index({}, function(data){
    console.log('success, got data: ', data);
    $scope.response = "yoy!"
  }, function(err){
    console.log('error, got data: ', err);
    $scope.response = "yay!"
  }); 
});
Run Code Online (Sandbox Code Playgroud)

并且一些请求由$ http直接进行,如身份验证

var request = $http.post('http://', {email: email, password: password});
Run Code Online (Sandbox Code Playgroud)

在实际请求发出/响应接收之前,我可以在何处以及如何判断角度以对JSON进行收缩和编码/解码?

我想我将外部库包装为deflate并编码/解码到工厂.然后这个工厂将被注入?喜欢$ httpBackend?

pko*_*rce 7

您应该查看该服务的请求/响应转换$http:http://docs.angularjs.org/api/ng.$http

请求/响应转换器只是在将内容发送/传回给调用者之前可以调用的函数.您可以全局(针对所有请求/响应)以及每个请求基础指定转换函数:

要在本地覆盖这些转换,请将转换函数指定为配置对象的transformRequest和/或transformResponse属性.要全局覆盖默认转换,请覆盖$ httpProvider的$ httpProvider.defaults.transformRequest和$ httpProvider.defaults.transformResponse属性.

要定义全局请求/响应转换器,可以沿着这些行编写代码(它更像伪代码,不适用于所有浏览器,请参阅下面有关Base64的说明):

angular.module('sample', [], function($httpProvider) {

    $httpProvider.defaults.transformRequest = function(data, headersGetter) {
        return btoa(JSON.stringify(data));
    };

    $httpProvider.defaults.transformResponse = function(data, headersGetter) {
        return JSON.parse(atob(data));
    };

})
Run Code Online (Sandbox Code Playgroud)

当然,您的转换代码可能更复杂,并且依赖于请求/响应标头,但总体思路就在这里.jsFiddle代码(检查控制台以查看请求被转换,您需要使用Mozilla或WebKit浏览器):http://jsfiddle.net/Ydt5j/

对于从/到Base64的实际转换,请检查以下问题:如何在JavaScript中将字符串编码为Base64?