我有一个键值对的列表,我在名为accessUrl
的函数中访问它们。我们点击的网址是外部网址,而不是由我们维护,即我无法更改服务器代码,这些代码会从这些网址发回回复信息
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
我正在尝试制作交叉来源请求。目前我已将Chrome扩展程序添加到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扩展了。没有扩展名,我遇到了以下错误:
阻止跨源请求:同源策略禁止读取 https://myurl.com处的远程资源(原因:CORS标头 “Access-Control-Allow-Origin”缺失。)
我们是否有办法在Angular中编写代码来制作CORS请求或任何其他方法?
我已经完成了建议的答案:
然而,我无法弄清楚需要什么。
答案 0 :(得分:0)
将这些标头添加到您的节点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);
答案 1 :(得分:0)
首先在配置中注入httpProvider,然后在app.js中包含以下行
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
它会像魅力一样发挥作用。
答案 2 :(得分:0)
您可以在服务器中使用cors
库,之后您不需要在GET/POST
个请求中添加/发送任何特殊标题,只需在文件中添加以下两行:
方法1:
var cors = require('cors');
app.use(cors());
使用npm安装后:
npm install cors --save
<强>方法2:强>
如果您不想使用其他库,可以在服务器文件中手动添加标题:
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:
如果你不想编辑服务器端代码直到开发过程,你可以使用这个CORS
chrome extension完美地完成工作。
P.S:您可能必须禁用它才能访问google / youtube等其他网站。
答案 3 :(得分:0)
外部API需要提及哪个来源可以调用API。如果您的域名未在外部API中定义,则无法访问API。这是安全功能。解决此问题的唯一方法是让外部API提供商允许您的主机名。
这可以使用&#39; Access-Control-Allow-Origin&#39;头。您的外部API必须使用&#39; Access-Control-Allow-Origin&#39;发送标题。作为键,主机名作为值。没有其他方法可以绕过这个。