javascript HTTP पोस्ट अनुरोध भेजने के लिए CORS AngularJS को सक्षम करें




http-post httprequest (4)

मैं अपने सर्वर पर फ़ॉर्म सबमिट करके HTTP पोस्ट अनुरोध भेजना चाहता हूं, जो एक अलग डोमेन में (और सर्वर स्क्रिप्ट में cors को node.js का उपयोग करके सक्षम किया गया है)।

यह स्क्रिप्ट है जहां सभी कोनाली कॉन्फ़िगरेशन हैं:

var myApp = angular.module('myApp', ['ngRoute']);

myApp.config(function($routeProvider, $locationProvider, $httpProvider) {

  $httpProvider.defaults.useXDomain = true;
  delete $httpProvider.defaults.headers.common['X-Requested-With'];

  $routeProvider
  .when('/', {
    controller: 'RouteCtrl',
    templateUrl: 'views/home_views.html'
  })
  .when('/login', {
    controller: 'RouteCtrl',
    templateUrl: 'views/login_views.html'
  })
  .when('/register', {
    controller: 'RouteCtrl',
    templateUrl: 'views/register_views.html'
  })
});

myApp.controller("UserController", function($scope, $http) {
  $scope.formData = {};
  $scope.clickMe = function() {
    console.log("Yay");
      $http({
        method: 'POST',
        url: 'http://localhost:8183/user/register',
        data: $.param($scope.formData),
      })
      .success(function(data) {
        console.log(data);
        if(!data.success) {
          console.log("error here");
        } else {
          console.log("error there");
        }
      });
  }
}); ...

मैं AngularJS 1.2.22 का उपयोग कर रहा हूं और जैसा कि इस ट्यूटोरियल (कॉरस को सक्षम) में कॉरस को सक्षम करने के लिए कहा है, इसे कॉन्फिग में मैन्युअल रूप से सीओआरएस को सक्षम करने की आवश्यकता है। लेकिन यह अभी भी काम नहीं कर रहा है यहां ब्राउज़र कंसोल से मुझे क्या मिला है

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8183/user/register. This can be fixed by moving the resource to the same domain or enabling CORS.

मैं अंगुल्यजीएस के लिए काफी नया हूँ ताकि कोई भी गलती करने के लिए मेरी मदद की सराहना की जाए .. धन्यवाद!

---- संपादित करें: server.js स्क्रिप्ट जोड़ना ----

var express = require('express'),
    app = express(),
    bodyParser = require('body-parser'),
    expressValidator = require('express-validator'),
    mysql = require('mysql'),
    crypto = require('crypto'),
    cors = require('cors'),
    uuid = require('node-uuid');

var connectionpool = mysql.createPool({
    connectionLimit: 1000,
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'cloudvm'
});

app.listen(8183);
app.use(bodyParser.urlencoded({
    extended: true
}));

app.use(bodyParser.json());
app.use(expressValidator());
app.use(cors());


var user_router = express.Router();
var user_list = user_router.route('/list');
var user_register = user_router.route('/register');
var user_login = user_router.route('/login');

app.use('/user', user_router);

user_register.post(function(req, res, next) {

    var errors = req.validationErrors();
    if (errors) {
        res.status(200);
        res.send(errors);
        console.log(errors);
        return;
    }
    var data = {
        name_user: req.body.name,
        email_user: req.body.email,
        password_user: req.body.password,
        no_telp_user: req.body.no_telp,
        company_name_user: req.body.company_name,
        address_user: req.body.address,
        name_cc_user: req.body.name_cc,
        address_cc_user: req.body.address_cc,
        no_cc_user: req.body.no_cc,
        no_vcv_user: req.body.no_vcv,
        expire_month_cc_user: req.body.expire_month,
        expire_year_cc_user: req.body.expire_year
    };

    connectionpool.getConnection(function(err, connection) {
        if (err) {
            console.error('CONNECTION ERROR:', err);
            res.statusCode = 503;
            res.send({
                result: 'error',
                err: err.code
            });
        } else {
            var sql = 'INSERT INTO user SET ?';
            console.log(sql)
            connection.query(sql, data, function(err, rows, fields) {
                if (err) {
                    console.error(err);
                    res.statuscode = 500;
                    res.send({
                        result: 'error',
                        err: err.code
                    });
                }
                res.send([{
                    msg: "registration succeed"
                }]);
                connection.release();
            });

        }

    });
});

उपाय

इस तरह के उत्तर के लिए धन्यवाद, लेकिन मैंने अपने सर्वर स्क्रिप्ट (नोड पर चल रहे) पर कॉरस को सक्षम करने में कामयाब रहा है, फिर मैंने इसका इस्तेमाल करने की कोशिश की

headers: { 'Content-Type': 'application/x-www-form-urlencoded' }

मेरे अनुरोध पर जब क्लाइंट-साइड स्क्रिप्ट पर http अनुरोध किया जाता है, तो आखिरकार मुझे सीओआरएस समस्या के बिना सर्वर से प्रतिक्रिया प्राप्त करने दे! तो, मैंने सोचा कि यह शीर्ष लेख की समस्या हो सकती है .. इसलिए, आप उत्तरदायी प्रतिक्रियाओं के लिए धन्यवाद! आशा है कि भविष्य में इस समस्या वाले किसी को भी मदद मिलेगी!


मुझे इसे प्राप्त करने के लिए लंबे समय से संघर्ष करना पड़ा, आखिरकार मुझे इसके लिए एक समाधान मिला।

क्लाइंट साइड के आसपास गड़बड़ करने की बजाए आप सर्वर साइड पर एक ही चीज़ प्राप्त कर सकते हैं यहां सरल सीओआरएस फ़िल्टर है जिसे आपको सर्वर साइड पर जोड़ना होगा।

package com.domain.corsFilter;

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    chain.doFilter(req, res);
}

public void init(FilterConfig filterConfig) {}

public void destroy() {}

}

नोट: अगर आपको ऊपर के आयात के लिए मदद चाहिए, तो नीचे दिए गए पृष्ठ विषय पर जाएं: सीओआरएस के लिए सीओआरएस फ़िल्टर अनुरोध के लिए फ़िल्टर अनुरोध

अपने web.xml में इस फिल्टर को जोड़ें

filter
    filter-name corsFilter filter-name
    filter-class com.domain.corsFilter.SimpleCORSFilter filter-class
filter
filter-mapping
    filter-name corsFilter filter-name
    url-pattern /* url-pattern
filter-mapping

वेब। Xml कोड में '<', '/>' टैग जोड़ें, मुझे इस टिप्पणी को पोस्ट करने के लिए निकालना पड़ा।


इसी तरह मैं एक्सप्रेस अनुप्रयोगों में कॉरस करता हूं, आपको विकल्प के बारे में याद रखना होगा क्योंकि कुछ चौखटे के लिए कॉर्स के लिए 2 कॉल्स हैं, पहले एक विकल्प है, जो कि कौन से तरीके उपलब्ध हैं, और फिर वास्तविक कॉल है, विकल्प केवल रिक्त उत्तर 200 OK

js

allowCrossDomain = function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
  if ('OPTIONS' === req.method) {
    res.send(200);
  } else {
    next();
  }
};

app.use(allowCrossDomain);

आपको बस अपने सर्वर साइड रिस्पांस हेडर में कुछ हैडर गुण जोड़ना होगा

यहां नोडजेएस सर्वर के लिए एक उदाहरण है

app.all("/api/*", function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
  res.header("Access-Control-Allow-Methods", "GET, PUT, POST");
  return next();
});

यह AngularJS क्रॉस-डोमेन AJAX कॉल को हल करेगा।

मुझे यह समाधान मिल गया है कि कैसे कोएर्स को एंजरीआरएस में सक्षम किया जा सकता है


निम्नलिखित के लिए सामग्री-प्रकार शीर्षलेख जोड़ना मेरे लिए समस्या तय की गई

[संपादित करें] सही तरीका है
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }





httprequest