在 node.js/angular 应用程序中查询来自不同主机的数据时,如何遵守访问控制起源异常? [复制]

Posted

技术标签:

【中文标题】在 node.js/angular 应用程序中查询来自不同主机的数据时,如何遵守访问控制起源异常? [复制]【英文标题】:How can I obey access control origin exception while querying data from different host in node.js/angular app? [duplicate] 【发布时间】:2016-01-21 23:02:35 【问题描述】:

有一个网页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());
)

在我的前端查询控制器中:

$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 !!!!!!网页.html:1 XMLHttpRequest 无法加载 http://ip2c.org/10.0.1.3。不 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:3000” 访问

我怎样才能遵守它并在我的控制台中看到正确的结果?

【问题讨论】:

【参考方案1】:

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

您可以将功能移至您的服务器。以下是序列的工作方式:

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

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

【讨论】:

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

以上是关于在 node.js/angular 应用程序中查询来自不同主机的数据时,如何遵守访问控制起源异常? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Node.js、angular.js 和 MongoDB 入门、建模关系和其他提升技巧 [关闭]

Node.js、Angular、express-session:由于 cookie 策略(sameSite cookie),Chrome 80 不保存会话

为啥 Angular 需要 Node Js? Angular Cli 的作用是啥?

ExpressJS Node.js Angular 错误:获取 OAuth2 API 授权令牌时出现 getaddrinfo ENOTFOUND

Node.js Angular.js Vue.js视频教程合集

18个惊人的Angular项目