有一个网页http://ip2c.org/它将任何 ip 号码解析为国家/地区名称,我所要做的就是给它一个参数,例如 http://ip2c.org/10.0.1.3
(我知道这是我的本地主机,仅用于测试)。当我在浏览器中运行它时,我看到 1;ZZ;ZZZ;Reserved
没关系,我知道这不是一个可以反向地理标记的 IP 地址。但我希望在我的 Node.js/Angular 应用程序中得到类似的结果。
到目前为止,我在后端代码中创建了一个函数:
app.get('/get/ip/address', function (req, res) {
var ip = require('ip');
res.json(ip.address());
})
在我的前端查询 Controller 中:
$scope.countryName = function() {
$http.get('/get/ip/address').success(function (data) {
console.log(data);
console.log("!!!!!");
$http.get('http://ip2c.org/'+data).success(function (data) {
console.log(data);
})
})
}
当我运行它时,我看到:
queryCtrl.js:127 10.0.1.3 queryCtrl.js:128 !!!!! webpage.html:1 XMLHttpRequest cannot load http://ip2c.org/10.0.1.3. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access
我怎样才能遵守它并在控制台中看到正确的结果?
最佳答案
服务器决定哪些浏览器可以查询它以及是否允许跨源请求。您的客户端 Angular 代码无法以任何方式更改/修复该问题。如果服务器不允许来自浏览器的跨域请求,那么浏览器就无法发出该跨域请求。
您可以做的是将功能移至您的服务器。该序列的工作原理如下:
- 客户端查询您的服务器,询问国家/地区。
- 您的服务器从该请求中获取客户端 IP 地址。
- 然后,您的服务器向 ip2c.org URL 发出请求以获取国家/地区。
- 然后,您的服务器将该国家/地区返回给 Angular 客户端。
由于服务器不受跨源限制(这只是浏览器的问题),因此您可以让服务器代表您发出跨源请求。
关于javascript - 在 Node.js/Angular 应用程序中查询来自不同主机的数据时,如何遵守访问控制源异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34936042/