Javascript 角度$http.post和否';访问控制允许原点';标题
我有两个带有nodejs的应用程序,angularjs.nodejs应用程序的代码如下:Javascript 角度$http.post和否';访问控制允许原点';标题,javascript,node.js,angularjs,angularjs-service,Javascript,Node.js,Angularjs,Angularjs Service,我有两个带有nodejs的应用程序,angularjs.nodejs应用程序的代码如下: require('http').createServer(function(req, res) { req.setEncoding('utf8'); var body = ''; var result = ''; req.on('data', function(data) { // console.log("ONDATA"); //var _data = par
require('http').createServer(function(req, res) {
req.setEncoding('utf8');
var body = '';
var result = '';
req.on('data', function(data) {
// console.log("ONDATA");
//var _data = parseInput( data,req.url.toString());
var _data = parseInputForClient(data, req.url.toString());
switch (req.url.toString()) {
case "/cubes":
{
res.writeHead(200, {
'Content-Type': 'application/json',
"Access-Control-Allow-Origin": "*"
});
res.end(JSON.stringify(result));
而此应用程序主机位于http://localhost:4000
.angularjs应用程序主机,节点http服务器
模块打开localhost://www.localhost:3030
。在我的angularjs服务中,我有一些类似的东西:
fetch:function(){
var data = '{somedata:"somedata"}';
return $http.post('http://localhost:4000/cubes',data).success(function(cubes){
console.log(cubes);
});
}
但当此服务向服务器发送请求时,会出现以下错误:
XMLHttpRequest cannot load http://localhost:4000/cubes. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3030' is therefore not allowed access.
所以我搜索网页和stackoverflow来找到一些主题,然后我找到和。根据这些主题,我将服务器中的响应头更改为如下内容:
require('http').createServer(function(req, res) {
req.setEncoding('utf8');
var body = '';
var result = '';
req.on('data', function(data) {
// console.log("ONDATA");
//var _data = parseInput( data,req.url.toString());
var _data = parseInputForClient(data, req.url.toString());
switch (req.url.toString()) {
case "/cubes":
{
res.writeHead(200, {
'Content-Type': 'application/json',
"Access-Control-Allow-Origin": "*"
});
res.end(JSON.stringify(result));
但这不起作用。我尝试使用firefox、chrome,并使用Telerik Fiddler Web Debugger检查请求,但服务器仍然挂起,我得到了访问控制允许源错误。您执行POST请求,它根据CORS规范生成飞行前请求:和 您的服务器还应该响应OPTIONS方法(除了POST),并在那里返回
accesscontrolalloworigin
你可以看到它的原因,因为当你的代码在网络选项卡(或Fiddler代理调试器)中创建请求时,你应该看到带有
ORIGIN
header的选项request你可能需要一些额外的头,请看这篇文章:IIRC你至少需要一个允许的方法。另外,我用答案解决了我的问题。问题来自邮政。