我无法调用我的全功能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);
});
});
答案 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();
});