【问题标题】:Allowing cross-domain calls with Yeoman (1.0) grunt server允许使用 Yeoman (1.0) grunt server 进行跨域调用
【发布时间】: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


【解决方案1】:

使用此 github 拉取请求中的方法解决了 sans 与节点乱搞的问题:http://github.com/angular/angular.js/pull/1454

【讨论】:

    【解决方案2】:

    您可以使用 Apache 代理并将您的 REST 服务器与 gruntjs(angular.js) 连接。

    Apache 会这样做:

    • 代理/-> gruntjs
    • 代理/服务 -> REST 服务器

    您会使用您的应用程序访问 Apache,而 angular.js 应用程序会认为它正在与自身对话,因此不会出现跨域问题。

    这里有一个关于如何设置的很棒的教程:http://alfrescoblog.com/2014/06/14/angular-js-activiti-webapp-with-activiti-rest/

    【讨论】:

    • 这很方便。不知道那个。谢谢@user3420847。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2011-07-19
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多