Angularjs $http.get()调用的节点表达式跨源
我做了一个简单的节点服务器,我需要它是Angularjs $http.get()调用的节点表达式跨源,angularjs,node.js,express,cross-domain,Angularjs,Node.js,Express,Cross Domain,我做了一个简单的节点服务器,我需要它是$http.get()调用的跨源,所以我向应用程序添加了所需的头。在回答中使用作为详细信息。最后,服务器代码是- var express = require('express'); var app = express(); var port = process.env.PORT || 3000; app.use(express.static('.')); app.all('/', function(req, res, next) { res.hea
$http.get()
调用的跨源,所以我向应用程序添加了所需的头。在回答中使用作为详细信息。最后,服务器代码是-
var express = require('express');
var app = express();
var port = process.env.PORT || 3000;
app.use(express.static('.'));
app.all('/', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.listen(port);
console.log('server runs on port: ' + port);
在我的index.html
中,有一个$http.get()
调用另一个原点-
$http.get('http://itunes.apple.com/search', {
term: 'johnson'
});
但此调用仍被浏览器拒绝并返回错误-
XMLHttpRequest cannot load https://itunes.apple.com/search. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
如何正确地从index.html
调用跨源$http.get
您实际上不了解跨源资源共享是如何工作的。跨源请求应该允许在向其发出请求的服务器上进行,而不是在为页面提供服务的服务器上进行
所以,答案是你不能向苹果网站提出请求,如果他们不允许你这么做
注意:您已允许其他网站通过将此代码添加到您的express应用程序来向您的网站提出请求:
app.all('/', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
为什么你在你自己的Web服务器上允许CORS,并等待它在Apple服务器上被允许?我是node的新手,请给我一个解决方案,如果你有..简短回答:当服务器上不允许CORS时,从你的网页发出跨域请求是不可能的。因为你无法控制itunes,所以你无法控制我如何调用$http.get('http://itunes.apple.com/search', {...})
并返回响应JSON?您不能这样做。您不能从网页的javascript发出这样的请求。从节点的js文件发出这样的请求是可能的吗?如果您真的想解决这个问题,您应该向web服务器添加函数,该函数将从nodejs向该页面发出请求,然后从网页的javascript调用它