angularjs - tutorial - node js




$ Http के साथ कोणीय, सामग्री प्रकार नहीं भेजा जा रहा है (4)

कोणीय सही सामग्री प्रकार विकल्प नहीं जोड़ रहा है, मैंने निम्नलिखित कमांड की कोशिश की:

$http({
    url: "http://localhost:8080/example/teste",
    dataType: "json",
    method: "POST",
    headers: {
        "Content-Type": "application/json"
    }
}).success(function(response){
    $scope.response = response;
}).error(function(error){
    $scope.error = error;
});

उपरोक्त कोड निम्नलिखित http अनुरोध उत्पन्न करता है:

POST http://localhost:8080/example/teste HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 0
Cache-Control: no-cache
Pragma: no-cache
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31
Content-Type: application/xml
Accept: application/json, text/plain, */*
X-Requested-With: XMLHttpRequest
Referer: http://localhost:8080/example/index
Accept-Encoding: gzip,deflate,sdch
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: JSESSIONID=C404CE2DA653136971DD1A3C3EB3725B

जैसा कि आप देख सकते हैं, "एप्लिकेशन / json" के बजाय, सामग्री प्रकार "एप्लिकेशन / xml" है। क्या मुझसे कोई चूक हो रही है ?


आपको अनुरोध के साथ एक निकाय शामिल करने की आवश्यकता है। कोणीय सामग्री-प्रकार हेडर को अन्यथा हटा देता है।

$http तर्क के लिए data: '' जोड़ें data: ''


बस प्रत्येक POST अनुरोध में "सामग्री-प्रकार" हेडर को गतिशील रूप से जोड़ने का एक उदाहरण दिखाने के लिए। हो सकता है कि मैं POST परम को क्वेरी स्ट्रिंग के रूप में पास कर रहा हूं, जो कि ट्रांसफॉर्मर का उपयोग करके किया जाता है। इस स्थिति में इसका मान अनुप्रयोग / x-www-form-urlencoded है

// set Content-Type for POST requests
angular.module('myApp').run(basicAuth);
function basicAuth($http) {
    $http.defaults.headers.post = {'Content-Type': 'application/x-www-form-urlencoded'};
}

फिर कॉन्फ़िगर ऑब्जेक्ट को वापस करने से पहले अनुरोध विधि में इंटरसेप्टर से

// if header['Content-type'] is a POST then add data
'request': function (config) {
  if (
    angular.isDefined(config.headers['Content-Type']) 
    && !angular.isDefined(config.data)
  ) {
    config.data = '';
  }
  return config;
}

मामले में यह किसी के लिए उपयोगी है। AngularJS 1.5x के लिए मैं सभी अनुरोधों के लिए CSRF निर्धारित करना चाहता था और मैंने पाया कि जब मैंने ऐसा किया था:

$httpProvider.defaults.headers.get = { 'CSRF-Token': afToken }; 
$httpProvider.defaults.headers.put = { 'CSRF-Token': afToken };
$httpProvider.defaults.headers.post = { 'CSRF-Token': afToken }; 

कोणीय ने सामग्री प्रकार को हटा दिया ताकि मुझे इसे जोड़ना पड़े:

$httpProvider.defaults.headers.common = { "Content-Type": "application/json"};

अन्यथा मुझे 415 मीडिया प्रकार की त्रुटि मिलती है।

इसलिए मैं सभी अनुरोधों के लिए अपने आवेदन को कॉन्फ़िगर करने के लिए ऐसा कर रहा हूं:

angular.module("myapp.maintenance", [])
    .controller('maintenanceCtrl', MaintenanceCtrl)
    .directive('convertToNumber', ConvertToNumber)
    .config(configure);

MaintenanceCtrl.$inject = ["$scope", "$http", "$sce", "$window", "$document", "$timeout", "$filter", 'alertService'];
configure.$inject = ["$httpProvider"];

// configure the header tokens for  CSRF for http operations in this module
function configure($httpProvider) {

    const afToken = angular.element('input[id="__AntiForgeryToken"]').attr('value');

    $httpProvider.defaults.headers.get = { 'CSRF-Token': afToken }; // only added for GET
    $httpProvider.defaults.headers.put = { 'CSRF-Token': afToken }; // added for PUT
    $httpProvider.defaults.headers.post = { 'CSRF-Token': afToken }; // added for POST

    // for some reason if we do the above we have to set the default content type for all 
    // looks like angular clears it when we add our own headers
    $httpProvider.defaults.headers.common = { "Content-Type": "application/json" };

}

         $http({
                method: 'GET',
                url:'/http://localhost:8080/example/test' + toto,
                data: '',
                headers: {
                    'Content-Type': 'application/json'
                }
            }).then(
                function(response) {
                    return response.data;
                }, 
                function(errResponse) {
                    console.error('Error !!');
                    return $q.reject(errResponse);
                }