在 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