只是无法解决CORS问题

时间:2016-04-22 20:59:14

标签: angularjs node.js cors ibm-cloud

我无法调用我的全功能API,因为我一直收到此错误 -

angular.js:9827 **OPTIONS http://xyz.mybluemix.net/add_user** (anonymous function) 
@ angular.js:9827sendReq @ angular.js:9628serverRequest 
@ angular.js:9344processQueue @ angular.js:13189(anonymous function) 
@ angular.js:13205Scope.$eval @ angular.js:14401Scope.$digest 
@ angular.js:14217Scope.$apply @ angular.js:14506(anonymous function) 
@ angular.js:16232completeOutstandingRequest
@ angular.js:4905(anonymous function) 
@ angular.js:5285
welcome.html:1 **XMLHttpRequest cannot load http://xyz.mybluemix.net/add_user. 
Response to preflight request doesn't pass access control check: 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:9000' is therefore not allowed access. 
The response had HTTP status code 502.**

以下是我正在运行的代码:

//Client side code (Angular JS)  
dataFactory.makeUser(user)
    .then(function (response) {
        console.log('User created');
        window.location = "index.html";
    }, function(error) {
        console.log('User failed to create: ' + error.message);
    });


    app.factory('dataFactory', ['$http', function($http) {

        var base = 'xyz';
        var dataFactory = {};

        //works fine
        dataFactory.getAllUsers = function () {
            return $http.get(base+"get_all_users");
        };

        //works fine
        dataFactory.getUserById = function (id) {
            return $http.post(base+"get_user_byId", id);
        };

        //the request with the problem
        dataFactory.makeUser = function (user) {
            return $http.post(base+"add_user", user);
        };

        return dataFactory;
    }]);


    //Server-side code 


    var express = require('express');
    var bodyParser = require('body-parser');
    var mysql      = require('mysql');
    var app = express();
    var cors = require('cors');
    app.use(cors());


    app.post('/add_user',  function(req, res) {
      var id = req.body.id;
      var name = req.body.name;
      var gender = req.body.gender;
      var email = req.body.email;
      var age_min = req.body.age_min;
      var age_max = req.body.age_max;
      var hometown = req.body.hometown;
      var picture = req.body.picture;

      var user = {
            id: id,
            name: name,
            gender: gender,
            email: email,
            age_min: age_min,
            age_max: age_max,
            hometown: hometown,
            picture: picture
        };

      connection.query('INSERT INTO users SET ?', user, function(err, rows) {
          if (err) {
            res.json(err);
            return;
          }
          res.json(rows);
      });

    });

1 个答案:

答案 0 :(得分:3)

看起来你正在尝试从你的web域到localhost做一个cor并且你没有明确告诉服务器localhost这种类型的请求是好的。服务器拒绝握手并回来(预检)说业务是禁止的。

我对npm-cors不太熟悉,根据文档,你的实现看起来是正确的。

express具有控制cor的能力,这是你正在尝试做的事情:

public void EnableInputText(SelectEvent event) {


for(int i=0;i<=selectedEmployees.size();i++){ 
    for(int j=0;j<=employeeList.size();j++){          
    if(selectedEmployees.get(i).getId().equals(employeeList.get(j).getId()))
    {
       selectedEmployees.get(j).setDisable(false);
       break;
    }
   }
 }

}

我忘了提及确保您的基本http输入端口附加了端口:

app = express();
app.use(function(req, res, next) {
  //
  //allow cor on origin (use req.headers.origin to allow everything,
  //very discouraged since you're api only communicates with your site)
  //
  res.header('Access-Control-Allow-Origin', 'http://xyz.mybluemix.net');

  //if you are passing creds, which you're not
  //res.header('Access-Control-Allow-Credentials', true); 

  //methods allowed
  res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');

  //headers allowed
  res.header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept');

  //continue on with the request
  next();
});