Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js/angular app中查询来自不同主机的数据时,如何遵守访问控制源异常?_Javascript_Angularjs_Node.js_Geolocation - Fatal编程技术网

Javascript 在node.js/angular app中查询来自不同主机的数据时,如何遵守访问控制源异常?

Javascript 在node.js/angular app中查询来自不同主机的数据时,如何遵守访问控制源异常?,javascript,angularjs,node.js,geolocation,Javascript,Angularjs,Node.js,Geolocation,有一个网页,它将任何ip号码解析为国家名称,我所要做的就是给它一个参数,例如http://ip2c.org/10.0.1.3(我知道这是我的本地主机,只是为了测试)。当我在浏览器中运行它时,我看到1;ZZ;ZZZ;保留的很好,我知道这不是一个可以反向地理标记的Ip地址。但我希望在node.js/angular应用程序中也能得到类似的结果 到目前为止,我在后端代码中创建了一个函数: app.get('/get/ip/address', function (req, res) { var i

有一个网页,它将任何ip号码解析为国家名称,我所要做的就是给它一个参数,例如
http://ip2c.org/10.0.1.3
(我知道这是我的本地主机,只是为了测试)。当我在浏览器中运行它时,我看到
1;ZZ;ZZZ;保留的
很好,我知道这不是一个可以反向地理标记的Ip地址。但我希望在node.js/angular应用程序中也能得到类似的结果

到目前为止,我在后端代码中创建了一个函数:

app.get('/get/ip/address', function (req, res) {
    var ip = require('ip');
    res.json(ip.address());
})
在我的前端查询控制器中:

$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:12710.0.1.3 queryCtrl.js:128!!!!!网页.html:1 无法加载XMLHttpRequest。不 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许使用源“” 通路


如何遵守它并在控制台中看到正确的结果?

由服务器决定哪些浏览器可以查询它,以及是否允许跨源请求。客户端角度代码无法以任何方式更改/修复该问题。如果服务器不允许来自浏览器的跨源请求,那么浏览器就无法发出该跨源请求

您可以做的是将功能移动到服务器上。下面是序列的工作方式:

  • 客户端查询您的服务器,询问国家/地区
  • 服务器从该请求中获取客户端IP地址
  • 然后,您的服务器向ip2c.org URL发出请求以获取国家/地区
  • 然后,服务器将该国家/地区返回给客户端

由于服务器不受跨源限制(这只是浏览器的问题),您可以让服务器代表您提出跨源请求。

非常感谢!您能告诉我如何修改服务器端代码以执行对ip2c.org的调用吗?@user3766930-只需查看nodejs的
request()
模块。它向您展示了如何向其他服务器发出http请求。