【发布时间】:2014-06-15 18:08:47
【问题描述】:
直到昨天我决定在 OS X 上使用 beta 1.0 版本时,我一直在使用 Yeoman 0.9。我使用 Yeoman 来开发一个 Angular 应用程序。
随着 Yeoman 0.9-->1.0 迁移完成并运行我的应用程序,我现在热衷于将由 yeoman grunt server 启动的开发服务器扩展到允许我对另一个团队开发的 API 进行跨域调用,托管在另一台服务器上,他们已经允许跨域调用。到目前为止,我们一直在使用由 angular.js 提供的假 http 后端。
--旁白--
如果有人正在阅读本文以寻找快速解决方案,我们可以通过将 --disable-web-security 选项从命令传递给 Chrome 来实现跨域调用在带有 Chrome 的 OS X 上使用 this approach 行,但它关闭了所有 Chrome 的安全性(大拇指向下),我们无论如何都无法让 Chrome 作为新实例启动。
--结束--
通过一些挖掘,我发现this Stack Overflow post(通过this post 的答案)让我很好地了解了我需要做什么才能获得grunt server允许跨域调用。 它本质上涉及添加一个中间件组件来连接以允许更改标头,以便将“Access-Control-Allow-Origin”设置为“*”或任何喜欢的值。
对 Node.js 一无所知,我可以看到帖子中提到的更改需要在 Yeoman 创建的许多文件中的某个地方进行,但是在哪里?我在 Yeoman 设置的“node_modules”目录中对“app.configure”和“connect.listen”进行了一些原始字符串搜索,但我找到了一些命中,其中大部分来自与模块捆绑的示例我不清楚我应该编辑哪个。如果有帮助,这里是我的 Angular 应用程序目录结构的快照:
如果有人能给我一些关于可以在哪里进行这些更改的指示,我将不胜感激!
【问题讨论】:
-
我的理解正确吗:您的 Angular 应用正在发出 CORS 请求,而其他 API 只接收 CORS 请求?
-
rdrey,没错。你认为我走错路了吗?
-
是的,对不起。这是一个关于 CORS 的可读指南:html5rocks.com/en/tutorials/cors 由于您的 AngularJS 应用程序仅充当客户端,所有 CORS 工作都需要由服务器端 API 人员完成。
-
谢谢 rdrey。据我了解,在发出跨域请求时,OPTIONS 请求先于您的实际请求。在允许真正的请求之前,需要对 OPTIONS 请求做出 OK 响应。服务器已经有 Access-Control-Allow-Origin="*" 所以我怀疑客户端的东西。我刚刚发现可以通过更改请求标头以省略“X-Requested-With”(github.com/angular/angular.js/pull/1454)来跳过 OPTIONS 请求。我已经做出了这个改变,在remysharp.com/demo/cors.php 上测试了一个 GET,它可以工作,但明天还没有在真实服务器上测试。谢谢!
-
P.S.如果我上面的评论解决了这个问题,那么很可能是我走上了一条有缺陷且混乱的道路,想要弄乱 grunt 服务器。尽管如此,我仍然对如何扩展服务器感到好奇,但这个 POST 可能不是正确的地方。 :=S
标签: node.js angularjs connect yeoman gruntjs