【发布时间】:2014-04-28 14:06:57
【问题描述】:
我正在使用 yo + grunt + angular.js 开始我的第一个项目。
我有一项服务需要从我的服务器读取一些数据;我使用 angular $http 服务构建了它。
我还构建了一个 RESTful Web 服务(用 PHP 实现,但它可以是 Java、C、Perl,...,没关系),它公开了一个 API 来获取数据。
grunt 为我的 ng-app 提供服务的服务器当前(并且可能永远)与运行 PHP Web 服务的服务器相同(由 apache 提供)。
我想知道这是否是一个可接受的架构...我最终在同一台服务器上拥有两个不同的服务器(grunt 和 apache)...此外,我总是必须添加一个“访问控制允许来源: 127.0.0.1" 到我的 PHP 服务的输出... :-(
例如,是否可以从 grunt 提供 PHP 服务?
更新:我说的是开发阶段...当然在生产中我不会使用 grunt...
为了更好地解释自己,我想在 $http() 中使用相对 url...在开发和生产阶段使用相同的代码...
如果在生产中我可以期望它工作,因为我将只有一台服务器用于部署的 Angular 应用程序和 PHP 服务,当 Angular 应用程序由 Grunt 提供服务时,该服务应该在开发时解释 PHP ?咕噜声本身?如果是,怎么做?
UDPATE 2 和一个可能的解决方案:在对这个问题思考了很多(也阅读了this 文章)之后,在这里没有得到满意的答案,我决定使用这种方法:
-
发展
- 使用“类似生产”的服务器(Apache、lighttpd、...)来提供真正的 PHP 页面。
使用带有 $http 或 $request 的绝对 URL 来访问该服务器(与 Grunt 不同,后者提供 angular.js 页面)。网址将很容易配置,只需要最少的工作(和可能的错误)即可切换到生产环境。 - 在 PHP 脚本中,在生成 (JSON) 输出之前,始终输出正确的“Access-Control-Allow-Origin”标头;该指令的值也很容易配置。
- 使用“类似生产”的服务器(Apache、lighttpd、...)来提供真正的 PHP 页面。
-
生产
- 将 angular.js 应用部署到部署 PHP 的同一服务器。
- 更改 url 并使它们相对,因为现在它们与客户端脚本共享相同的来源。
- 更改“Access-Control-Allow-Origin”标头,以仅允许本地请求(或者可能完全删除该标头...)。
如果有人想对此解决方案发表评论、提出异议或提出更好的解决方案,我将非常高兴...
【问题讨论】:
-
是的,你可以用 grunt 服务 php,但你最好使用 Apache 而不是内置的 livereload/watch 服务器。您仍然可以运行 grunt server 以使页面在保存时自动刷新。这将节省部署时间并允许您使用 modrewrite 等。
-
我不会使用主要用于简化开发的东西来服务于生产应用程序。
-
我说的是开发阶段...当然在生产中我不会使用 grunt...但是我想知道是否 - 例如 - 在 $http() 中我可以使用相对 url ...希望我确实解释了自己...
-
你考虑过使用 php buildin server for dev 吗?我用那个通过。带有 livereload 的 grunt-php