2012-12-30 7 views
8

कहना मैं कई $ संसाधनों और है की सुविधा देता है कुछ $ http मेरी कोणीय आवेदन के आसपास:AngularJS - सभी jsons अनुरोध बेस 64 को कैसे डिफ्लेट और एन्कोड/डीकोड करें?

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

    return $resource('http://', {id: '@id'}, 
    { 'index': { method: 'GET', isArray: true }, 
     'update': { method: 'PUT'}, 
    }); 
    }); 
नियंत्रक

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!" 
    }); 
}); 

और कुछ अनुरोध के साथ

सीधे प्रमाणीकरण की तरह $ http द्वारा बनाई गई हैं

var request = $http.post('http://', {email: email, password: password}); 

वास्तविक अनुरोध किए जाने से पहले JS64 को JS64 को डिफ्लेट और एन्कोड/डीकोड करने के लिए कोणीय कहां और कैसे कह सकता है/प्रतिक्रिया प्राप्त होती है?

मुझे लगता है कि मैं डिफ्लेट और एनकोड/डीकोड फैक्ट्री में बाहरी पुस्तकालयों को लपेटूंगा। और फिर इस कारखाने को इंजेक्शन दिया जाएगा? $ httpBackend की तरह?

उत्तर

6

आप $http सेवा के लिए अनुरोध/प्रतिक्रिया ट्रांसफार्मर पर एक नजर है चाहिए: http://docs.angularjs.org/api/ng.$http

अनुरोध/प्रतिक्रिया ट्रांसफार्मर बस कार्यों कि सामग्री से पहले लागू किया जा सकता है भेज दिया जाता है/वापस फोन करने वाले को सौंप दिया है। आप (सभी अनुरोधों/प्रतिक्रिया के लिए) विश्व स्तर पर काम करता है बदलने के साथ ही प्रति-अनुरोध के आधार निर्दिष्ट कर सकते हैं:

स्थानीय स्तर पर इन परिवर्तन ओवरराइड करने के लिए, निर्दिष्ट transformRequest और/या config वस्तु की 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)); 
    }; 

}) 

बेशक आपका ट्रांसफॉर्मिंग कोड अधिक परिष्कृत हो सकता है और अनुरोध/प्रतिक्रिया शीर्षकों पर निर्भर करता है लेकिन सामान्य विचार यहां है। How can you encode a string to Base64 in JavaScript?

+0

आपके उत्तर के लिए धन्यवाद। मुझे '$ httpProvider.defaults.transformRequest = function (अनुरोध) {वापसी Base64Factory.encode (अनुरोध)} जैसे कुछ करना अच्छा लगेगा;' my myApp.config (function() {}) में, लेकिन जहां तक ​​मुझे पता है मैं कॉन्फ़िगर फ़ंक्शन में फ़ैक्टरी इंजेक्ट नहीं कर सकता। क्या आप अधिक verbose हो और इस के साथ मेरी मदद करेंगे?धन्यवाद –

+0

मैंने myApp.run (function() {}) में पूरा करने का भी प्रयास किया है, लेकिन फिर भी कोई सफलता नहीं है? –

+0

आपको रन() के साथ क्या त्रुटि मिल रही है? –

2
angular.module('services.base64',[]); 
angular.module('services.base64').provider('base64', function() { 

    this.encode = function(str) { 
    return base64_encode(str); 
    } 

    this.decode = function(str) { 
    return base64_decode(str); 
    } 

    this.$get = function() { 
    return {}; 
    } 

}); 

var myApp = angular.module('myApp',['services.base64']) 

myApp.config(['base64Provider', function (base64Provider) { 
    $httpProvider.defaults.transformRequest = function(request){return base64Provider.encode(request)}; 

    $httpProvider.defaults.transformResponse = function(response){return base64Provider.decode(response)}; 
}]); 
: http://jsfiddle.net/Ydt5j/

वास्तविक रूपांतरण के लिए से Base64 के लिए/इस प्रश्न की जाँच करें: कोड के साथ jsFiddle (कंसोल जाँच को देखने के लिए कि एक अनुरोध तब्दील हो जाता है, आप मोज़िला या एक वेबकिट ब्राउज़र का उपयोग करना)

0

इस प्रकार मैं फ़िल्टर में करता हूं। item.htmlBody

// in template 
<div ng-bind-html="item.htmlBody | decodeBase64">{{item.htmlBody}}</div> 

//inside controller.js 

.filter('decodeBase64', function(){ 
    return function(text){ 
    return atob(text); 
    } 
}) 

अच्छी तरह से HTML टैग के साथ बेस 64 एन्कोडेड पाठ होता है, मैं यह does not वास्तव में इस सवाल का जवाब पता है, लेकिन कुछ मामूली ट्वीक साथ, तुम क्या आप (एक ही समस्या के साथ भविष्य व्यक्ति लक्ष्यीकरण) चाहते हैं प्राप्त कर सकते हैं

संबंधित मुद्दे