2016-04-22 58 views
1

我不能,因为我不断收到这个错误让我全功能的API调用 -就无法解决问题CORS

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

    }); 

回答

3

看起来你试图从你的web域到本地主机执行一个cor,并且你没有明确地告诉服务器localhost,这种类型的请求是好的。服务器拒绝握手,并回来(飞行前)说生意是不行的。

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

快递带有控制心病的能力,这是你想要做什么:

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(); 
}); 

我忘了提,以确保你的基地HTTP在连接到它的端口:

$http.post('http://xyz.mybluemix.net:9000/post', data);