Javascript Angular js-GET请求中阻止了跨原点请求

Javascript Angular js-GET请求中阻止了跨原点请求,javascript,angularjs,cors,Javascript,Angularjs,Cors,我有一个URL键值对列表,我正在名为accessUrl的函数中访问它们。我们点击的URL是外部URL,不由我们维护,也就是说,我不能更改从这些URL向我们发送响应的服务器代码 http.get() var accessUrl = function(){ $.each(url, function(key, value) { $http.get(value).success(function(response,status){ $scope.status=statu

我有一个URL键值对列表,我正在名为
accessUrl
的函数中访问它们。我们点击的URL是外部URL,不由我们维护,也就是说,我不能更改从这些URL向我们发送响应的服务器代码

http.get()

var accessUrl = function(){
  $.each(url, function(key, value)
  {
      $http.get(value).success(function(response,status){

      $scope.status=status;
      if($scope.status == "200"){
           versionMap[key]=response.version;
           setColor[key]='color-green';
           //console.log("map "+versionMap[key]);
        }
    })//end of success

       .error(function(err){
          versionMap[key]="Down";
          setColor[key]='color-red';
        })//end of error
  })//end of each loop
}//end of accessUrl
我正试图提出一个跨来源的请求。目前,我已将CORS扩展添加到Chrome中

我的app.js:

var express = require("express");
var app     = express();
var path    = require("path");

app.use("/", express.static(__dirname));

app.get('/',function(req,res){
  res.sendFile(path.join(__dirname+'/index.htm'));
  //__dirname : It will resolve to your project folder.
});

app.set('port', process.env.PORT);
console.log(port);
我不想再使用CORS扩展了。没有扩展,我遇到了以下错误:

已阻止跨源请求:同一源策略不允许读取 位于的远程资源(原因:CORS标头) “访问控制允许来源”丢失)

有没有一种方法可以让我们用Angular编写代码来发出CORS请求或任何其他方法

我已经阅读了以下建议的答案:


然而,我不知道需要什么

将这些头添加到节点js服务器

var express = require("express");
 var app = express();
 var path = require("path");

 app.use("/", express.static(__dirname));

 app.get('/', function(req, res) {
     res.sendFile(path.join(__dirname + '/index.htm'));
     //__dirname : It will resolve to your project folder.
 });

 app.use(function(req, res, next) {

     // Website you wish to allow to connect
     res.setHeader('Access-Control-Allow-Origin', '*');

     // Request methods you wish to allow
     res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

     // Request headers you wish to allow
     res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

     // Set to true if you need the website to include cookies in the requests sent
     // to the API (e.g. in case you use sessions)
     res.setHeader('Access-Control-Allow-Credentials', true);

     // Pass to next layer of middleware
     next();
 });

 app.set('port', process.env.PORT);
 console.log(port);

首先在配置中插入httpProvider,然后在app.js中包含以下行

$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';

它将像一个符咒一样工作。

您可以在服务器中使用
cors
库,之后您就不需要在
GET/POST
请求中添加/发送任何特殊标题,只需在文件中添加以下两行: 方法1:

var cors = require('cors');
app.use(cors());
使用npm安装后:

npm install cors --save
方法2:

var cors = require('cors');
app.use(cors());
如果不想使用其他库,可以在服务器文件中手动添加头,如下所示:

app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header('Access-Control-Allow-Methods', 'DELETE, PUT', 'GET', 'POST');
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});
方法3:

var cors = require('cors');
app.use(cors());
如果在开发过程之前您不想编辑服务器端代码,您可以使用这个
CORS
,它可以完美地完成工作。
附言:您可能必须禁用它才能访问其他网站,如google/youtube等。

外部API需要说明哪个来源可以调用该API。如果您的域名未在外部API中定义,则您无法访问该API。这是安全特性。解决此问题的唯一方法是要求外部API提供商允许您的主机名


这可以使用“访问控制允许来源”标题完成。您的外部API必须发送一个标头,其中“Access Control Allow Origin”作为键,主机名作为值。没有其他方法可以绕过这一点

谢谢你的回复。很抱歉这个天真的问题,但我不确定如何在config?angular.module('myApp').config(['$httpProvider',function($httpProvider)]中插入httpProvider嘿,这并没有解决问题!感谢您的回复。然后在应用程序中包含cors并使用cors。在节点服务器上使用()您可以提供服务器端和客户端脚本吗?我会亲自实施的。谢谢你的回答。但是添加这些标题没有帮助。此外,由于我们正在到达不在服务器上的端点(我们正在进行api get调用)。我不明白添加这些标题如何改变任何事情?因为据我所知,我们的app.js仅用于呈现html页面,如果我们从托管的页面获得响应,这会有所帮助。感谢您的响应。方法1不起作用,它仍然显示相同的错误。如问题中所述,方法2是我想要逃避的。方法1对我来说很好。您是否先安装了它
npm install cors--save
如果它仍然不起作用,请检查更新的方法2,您正在手动添加标题,这也应该可以正常工作。我们正在调用外部api,这不是由我们处理的!