【问题标题】:Cant set CORS using sails js for google maps geo location无法使用 Sails js 为谷歌地图地理位置设置 CORS
【发布时间】:2015-05-10 20:32:01
【问题描述】:

我很难在本地应用中启用 CORS。我一直在关注sails.js 的文档,我所要做的就是更改此设置“allRoutes:true”以启用cors。然后,当我尝试使用 angular 使用 google API 时。

getLocation: function(val) {
    return $http.get('http://maps.googleapis.com/maps/api/geocode/json', {
        params: { address: val, sensor: false }
    });
}

我的 chrome 控制台出现以下错误:
选项http://maps.googleapis.com/maps/api/geocode/json?address=an&sensor=false (索引):1 XMLHttpRequest 无法加载 http://maps.googleapis.com/maps/api/geocode/json?address=ui&sensor=false。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'http://localhost:1337'。响应的 HTTP 状态代码为 405。

希望有人对此有解决方案。问候。

【问题讨论】:

  • 您是否有一个角度拦截器正在向请求添加标头? sails.js 与此无关。
  • 嗨凯文。正如文档中明确说明的那样,我已在我的角度配置中添加了此设置。 .config(['$httpProvider', function($httpProvider) { $httpProvider.defaults.useXDomain = true; 删除 $httpProvider.defaults.headers.common['X-Requested-With']; }])
  • 我看不出 cors 与 angular 有什么关系,或者sails 配置与 google 的服务器有什么关系...
  • 您能否发布请求的图像(在 chrome 的开发工具 -> 网络选项卡中),以便我们可以看到所有发送的标头?

标签: javascript angularjs cors sails.js


【解决方案1】:

尝试在 Chrome 商店安装这个 chrome 浏览器插件并在选项中启用跨域资源共享。

https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en

编辑:

你的端点可能看起来像这样:

首先做:

npm install request

然后:

config/routes.js 中设置您的路线:

'get /location/:keyword': {
     controller: 'location',
     action: "getlocation"
},

然后在 api/controllers 中创建一个名为 LocationController.js

的控制器

在 LocationController.js 中设置您的 getlocation 操作。

var request = require('request');
module.exports = {
    getLocation: function(req, res) {
        var keyword = req.param('keyword');
        var url = 'http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=' + keyword;
        request(url, function (error, response, body) {
            if (!error && response.statusCode === 200) {
                 res.jsonp({result : body});
            }
        });
    }
};

然后您可以调用您自己的端点,服务器将从谷歌 API 返回 JSON,绕过 CORS 问题。

GET : localhost:1337/location/california

希望这会有所帮助。

理查德。

【讨论】:

  • 谢谢理查德,但我也尝试过这个解决方案,但我仍然得到同样的控制台错误。
  • 你能在你的 Sails.js 应用程序上设置一个新的端点,然后通过那里路由请求吗? 'GET /location/:address' 然后使用Node.js request 模块调用服务器端并返回结果?如果您需要示例,请询问。
  • 你能设置一个例子吗?
  • 可能是 angular- 但也可以查看这个示例 cors 配置:gist.github.com/mikermcneil/3e1bd86b7cca40fb4214
  • 这是我看到的唯一可用的解决方案,因为我找不到通过我的角度端点访问 google api 的任何方法。谢谢理查德!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
相关资源
最近更新 更多