只是不能解决CORS问题

我只是不能打电话给我全function的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); }); }); 

看来你正在试图从你的web域到本地主机,而你没有明确地告诉服务器localhost,这种types的请求是好的。 服务器拒绝握手,并回来(飞行前)说,生意是不行的。

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

快递有能力控制cor,这就是你想要做的:

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