javascript - 在 Node.js/Angular 应用程序中查询来自不同主机的数据时,如何遵守访问控制源异常?

标签 javascript angularjs node.js geolocation

有一个网页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/

相关文章:

javascript - 通过更新 $scope 模型更正条目后清除 Angular 形式验证

javascript - TypeError : User. findById 不是函数

angularjs - 如何使用 AngularJS 根据生成的字符串下载文本文件?

jquery - 使用 Angular 完成这项简单技术的最佳方法是什么?

node.js - i18next 说 key 总是错过

node.js - npm install 卡在 reify grpc 上

node.js - 异步 Mocha 测试(使用 Chai 断言库)应该失败,但被标记为通过

javascript - 将 svg map 转换为 jvectormap

AngularJS HTML5 模式在手动 url 更改时重新加载整个页面

javascript - 从哪里开始:JavaScript,NodeJS-加上Universe