Node Express Cross Origin用于$ http.get()调用

时间:2016-07-15 06:35:51

标签: angularjs node.js express cross-domain

我做了一个简单的节点服务器,我需要它作为$http.get()调用的Cross Origin,所以我将所需的标题添加到app.use作为this回答中的详细信息。最后,服务器代码是 -

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.

如何才能正确地从$http.get拨打交叉来源index.html

1 个答案:

答案 0 :(得分:2)

您实际上并不了解跨源资源共享的工作原理。在您提出请求的服务器上应该允许跨源请求,而不是在您为其提供页面服务的服务器上。

所以,答案是,如果他们不允许你这样做,你就无法向苹果网站提出请求。

P.S。您已允许其他网站通过将此代码添加到您的快递应用程序来向您的网站发出请求:

  app.all('/', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();